1 Assignment

Short objective

The objective of this report is to analyze the incidence rates of Guillain-Barré Syndrom (gbs) and anaphylactic shock using the PHARMO database, and to present the results in a clear and concise manner.

Methods

PHARMO

The data for this analysis was obtained from the PHARMO database, which is a research institute in the Netherlands that maintains a database of electronic medical records. The Pharmo Data Network is a population-based network of healthcare databases and combines data from different healthcare settings in the Netherlands. These different data sources are linked on a patient level through validated algorithms.

Study population

For this research particularly, individuals who were in the study between 01/01/2017 and 31/12/2020 are included. In addition, the study’s inclusion and exclusion criteria consist of three requirements. The first requirement is that individuals must have at least one year of follow-up before the study’s start date. The second requirement is that individuals must have at least one day of follow-up after the study’s start date. Lastly, the study will not consider repeated events, and individuals will be censored at the first occurrence of an event. After fulfilling the aforementioned requirements, we have a study population of N = 675

Data Preperation

Prior to the analysis, various tables are prepared and then combined in order to obtain the incidence rates. First the OBSERVATION_PERIOD table was loaded and individuals who are not in the above mentioned study population, will be removed.

After doing this, the PERSONS table was loaded. In this table, an age variable is made with the birth data variable. The age was created with the start of the study period as reference. with this age variable, the following age bands are created: 0-19, 20-39, 40-59, 60-79. The age band 80+ is not created, because the there are no individuals who are older than 67.

The next step in the date preparation, was merging the OBSERVATION_PERIODS and PERSON table. We only kept the individuals who are in the OBSERVATION_PERIODS table.

When the aforementioned tables are merged, Concept sets were created. These sets were created from diagnostic codes from the codesheet. All diagnostic codes and vocabulary of the events used to make incidence rates can be found in Table 1.1

When the aforementioned tables are merged, Concept sets were created. These sets were created from diagnostic codes from the codesheet. All diagnostic codes and vocabulary of the events we will make incidence rates of can be found in Table 1.1.

Figure 1.1: ANAPHYL and GBS event codes

Lastly, the EVENTS table is loaded, and merged with the event codes. If the persons had an event before the start of the study, they are removed from the dataset. If a person has more than one event, the second event is removed.

Analyis

For the analysis, incidence rates per 1000 person years for the study population are created per event (i.e. Anaphylactic Shock Narrow, Anaphylactic shock broad, and gbs). The formula for the incidence rates can be found below:

\[ \text{Incidence Rates overall} = \frac{Total \ number \ of \ events}{Total \ person-years} * 1000 \]

Afterwards, the incidence rates are stratified by year and age-bands. The formulas for these can be found below: \[ \text{Incidence rates by year} = \frac{total \ number \ of \ events \ for \ each \ year} { person-years \ for \ each \ year} * 1000 \]

\[ \text{Incidence rates by year by age bands} = \frac{Total \ number \ of \ events for \ each \ year \ per \ age \ band}{person-years \ for \ each \ year \ per \ age \ band} * 1000 \]

To assess the technical validation, confidence intervals are used. Exact Poisson confidence limits for the estimated rate are found as the Poisson means, for distributions with the observed number of events and probabilities relevant to the chosen confidence level, divided by time at risk. The relationship between the Poisson and chi-square distributions is employed here (Ulm, 1990):

\[Y_l = \frac{\chi^2_{2Y , a/2}}{2}\] \[Y_u=\frac{\chi^2_2(Y+1), 1-a/2}{2}\]

where Y is the observed number of events, \(Y_l\) and \(Y_u\) are lower and upper confidence limits for Y respectively, \(\chi^2_{v,a}\) is the chi-square quantile for upper tail probability on ν degrees of freedom.

Results

The forest plot figures (see Figure 1.2), show the incidence rates. A total of 86 events occurred. Of these events 28 were anaphylaxis narrow, 22 were anaphylaxis possible and 36 were GBS. When stratified in to age bands, the person years become lower and there is low confidence. Especially in the high and low age bands. Most events occurred in the first three years. In these years each type of event status had around 15 to 20 occurred events. The last year of the study has almost no events and bad incidence rate confidence interval.

Forest Plot Figures

Total

Forest plots of total IR

Figure 1.2: Forest plots of total IR

2017

forest plots data from 2017

Figure 1.3: forest plots data from 2017

2018

Forest Plot data from 2018

Figure 1.4: Forest Plot data from 2018

2019

Forest Plot data from 2019

Figure 1.5: Forest Plot data from 2019

2020

Forest plot data from 2020

Figure 1.6: Forest plot data from 2020

Lessons learned

We have learned to take data from various tables, and structure it to a dataset which can be analysed. In addition, we have learned that a lot of data is needed to make inference about incidence rates. That is, when data needs to be stratified. We discovered that the distribution of the data becomes skewed when stratified in different age bands. In this case the incidence over a 1000 person years confidence interval will get wider and thus make it harder to indicate the true incidence rate. More data from different sources could help in creating a better distributed stratification. This can be accomplished by using data from a Common Data Model. The data could also have some bias. All of the data is collected using health registries and (routine) care data. This means that every person in the dataset, has had contact with an health institution. Thus, perfectly healthy people with no events will not be included in the dataset.

Annexes

Annex 1 Results Table

Annex 2 Day 6

LS0tDQp0aXRsZTogIkFzc2lnbm1lbnQgRGF5IDgiDQphdXRob3I6ICJNYXJ0aWpuIEtvc3RlciwgSnVycmlhbiB2YW4gZGUgS3JhYXRzLCBUaW0gUG9vcnRodWlzIg0KZGF0ZTogImByIFN5cy5EYXRlKClgIg0Kb3V0cHV0Og0KICBib29rZG93bjo6aHRtbF9kb2N1bWVudDI6DQogICAgdG9jOiB0cnVlDQogICAgaGlnaGxpZ2h0OiB0YW5nbw0KICAgIHRoZW1lOiBwYXBlcg0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgIA0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFLCBjb21tZW50ID0gTkEsIHdhcm5pbmcgPSBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICBlcnJvcj1GQUxTRSwgcmVzdWx0cz0naGlkZScsZmlnLmtlZXA9J2FsbCcpDQpgYGANCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9DQoNCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KGRhdGEudGFibGUpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KERUKQ0KbGlicmFyeShlcGlSKQ0KYGBgDQoNCiMgQXNzaWdubWVudA0KDQoNCmBgYHtyfQ0KDQojIGxvYWQgdGhlIHRhYmxlcw0KT19QIDwtIHJlYWQuY3N2KCJUYWJsZXMvT0JTRVJWQVRJT05fUEVSSU9EUy5jc3YiKQ0KZXZlbnRzIDwtIHJlYWQuY3N2KCdUYWJsZXMvRVZFTlRTLmNzdicpDQpwZXJzb25zIDwtIHJlYWQuY3N2KCdUYWJsZXMvUEVSU09OUy5jc3YnKQ0KaW5zdGFuY2UgPC0gcmVhZC5jc3YoJ1RhYmxlcy9JTlNUQU5DRS5jc3YnKQ0KY29kZWxpc3QgPC0gcmVhZF9leGNlbCgiVGFibGVzL0NvZGVMaXN0XzIwMjEwMTI4KDEpLnhsc3giLCANCiAgICBzaGVldCA9ICJBTkFQSFlMIikNCmNvZGVsaXN0MiA8LSByZWFkX2V4Y2VsKCJUYWJsZXMvQ29kZUxpc3RfMjAyMTAxMjgoMSkueGxzeCIsIA0KICAgIHNoZWV0ID0gIkdCUyIpDQpgYGANCg0KDQojIyBTaG9ydCBvYmplY3RpdmUgey0jc2hvcnR9DQoNClRoZSBvYmplY3RpdmUgb2YgdGhpcyByZXBvcnQgaXMgdG8gYW5hbHl6ZSB0aGUgaW5jaWRlbmNlIHJhdGVzIG9mIEd1aWxsYWluLUJhcnLDqSBTeW5kcm9tIChnYnMpIGFuZCBhbmFwaHlsYWN0aWMgc2hvY2sgdXNpbmcgdGhlIFBIQVJNTyBkYXRhYmFzZSwgYW5kIHRvIHByZXNlbnQgdGhlIHJlc3VsdHMgaW4gYSBjbGVhciBhbmQgY29uY2lzZSBtYW5uZXIuDQoNCiMjIE1ldGhvZHMgey0jbWV0aH0NCg0KIyMjIFBIQVJNTyB7LSNwaGFyfQ0KDQpUaGUgZGF0YSBmb3IgdGhpcyBhbmFseXNpcyB3YXMgb2J0YWluZWQgZnJvbSB0aGUgUEhBUk1PIGRhdGFiYXNlLCB3aGljaCBpcyBhIHJlc2VhcmNoIGluc3RpdHV0ZSBpbiB0aGUgTmV0aGVybGFuZHMgdGhhdCBtYWludGFpbnMgYSBkYXRhYmFzZSBvZiBlbGVjdHJvbmljIG1lZGljYWwgcmVjb3Jkcy4gVGhlIFBoYXJtbyBEYXRhIE5ldHdvcmsgaXMgYSBwb3B1bGF0aW9uLWJhc2VkIG5ldHdvcmsgb2YgaGVhbHRoY2FyZSBkYXRhYmFzZXMgYW5kIGNvbWJpbmVzIGRhdGEgZnJvbSBkaWZmZXJlbnQgaGVhbHRoY2FyZSBzZXR0aW5ncyBpbiB0aGUgTmV0aGVybGFuZHMuIFRoZXNlIGRpZmZlcmVudCBkYXRhIHNvdXJjZXMgYXJlIGxpbmtlZCBvbiBhIHBhdGllbnQgbGV2ZWwgdGhyb3VnaCB2YWxpZGF0ZWQgYWxnb3JpdGhtcy4NCg0KDQoNCmBgYHtyfQ0KDQoNCmRmcDEgPC0gT19QICU+JSANCiAgZmlsdGVyKG9wX3N0YXJ0X2RhdGUgPD0gMjAxNjAxMDEsICMgUmVtb3ZlIGluZGl2aWR1YWxzIHRoYXQgZG8gbm90IGhhdmUgYXQgbGVhc3QgMSB5ZWFyIG9mIEZVIGJlZm9yZSBzdGFydCBvZiBzdHVkeQ0KICAgICAgICAgb3BfZW5kX2RhdGUgPj0gMjAxNzAxMDIpICMgbWFrZSBzdXJlIHRoYXQgdGhlIGluZGl2aWR1YWxzIGF0IGxlYXN0IGhhdmUgMSBkYXkgb2YgZnUgZHVyaW5nIHN0dWR5IHBlcmlvZCANCmRmcDEkc3RhcnRfc3R1ZHkgPC0gMjAxNzAxMDENCmBgYA0KDQpgYGB7cn0NCiMgTWFrZSBzdXJlIHRoYXQgYWxsIGRhdGVzIGFyZSBpbiBEYXRlIGZvcm1hdCBZWVlZLU1NLUREDQpkZnAxIDwtIGRmcDEgJT4lIA0KICBtdXRhdGUob3Bfc3RhcnRfZGF0ZSA9IGFzLkRhdGUoeW1kKG9wX3N0YXJ0X2RhdGUpKSwNCiAgICAgICAgIG9wX2VuZF9kYXRlID0gYXMuRGF0ZSh5bWQob3BfZW5kX2RhdGUpKSwNCiAgICAgICAgIHN0YXJ0X3N0dWR5ID0gYXMuRGF0ZSh5bWQoc3RhcnRfc3R1ZHkpKSkNCmBgYA0KDQpgYGB7cn0NCnBlcnNvbnMgPC0gcGVyc29ucyAlPiUgDQogIG11dGF0ZShiaXJ0aGRhdGUgPSBhcy5EYXRlKHltZCh5ZWFyX29mX2JpcnRoKjEwMDAwK21vbnRoX29mX2JpcnRoKjEwMCtkYXlfb2ZfYmlydGgpKSwgIyBjYWxjdWxhdGUgdGhlIGJpcnRoIGRhdGUNCiAgICAgICAgIGFnZSA9IGFzLm51bWVyaWMoZGlmZnRpbWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGFzLkRhdGUoeW1kKDIwMTcwMTAxKSksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpcnRoZGF0ZSwgdW5pdHM9J2RheXMnKSkgLyAzNjUuMjUsICMgY2FsY3VsYXRlIHRoZSBhZ2UgDQogICAgICAgICBhZ2VfYmFuZHMgPSBjdXQoYWdlLCBicmVha3MgPSBjKDAsMTksMzksNTksNzksSW5mKSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZS5sb3dlc3QgPSBULGluY2x1ZGUuaGlnaGVzdCA9IFQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIlswLDE5XSIsJ1syMCwzOV0nLCAnWzQwLDU5XScsICdbNjAsNzldJywgJ1s4MCtdJykpICMgTWFrZSBzdXJlIHRoZSBhZ2VzIGFyZSBkaXZpZGVkIGluIGFnZSBiYW5kcyANCiAgICAgICAgICAgICAgICAgICAgICAgICApICU+JSANCiAgZmlsdGVyKGFnZSA+PSAwKQ0KYGBgDQoNCg0KDQojIyMgU3R1ZHkgcG9wdWxhdGlvbiB7LSNzdHVwb3B9DQoNCkZvciB0aGlzIHJlc2VhcmNoIHBhcnRpY3VsYXJseSwgaW5kaXZpZHVhbHMgd2hvIHdlcmUgaW4gdGhlIHN0dWR5IGJldHdlZW4gMDEvMDEvMjAxNyBhbmQgMzEvMTIvMjAyMCBhcmUgaW5jbHVkZWQuIEluIGFkZGl0aW9uLCB0aGUgc3R1ZHkncyBpbmNsdXNpb24gYW5kIGV4Y2x1c2lvbiBjcml0ZXJpYSBjb25zaXN0IG9mIHRocmVlIHJlcXVpcmVtZW50cy4gVGhlIGZpcnN0IHJlcXVpcmVtZW50IGlzIHRoYXQgaW5kaXZpZHVhbHMgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSB5ZWFyIG9mIGZvbGxvdy11cCBiZWZvcmUgdGhlIHN0dWR5J3Mgc3RhcnQgZGF0ZS4gVGhlIHNlY29uZCByZXF1aXJlbWVudCBpcyB0aGF0IGluZGl2aWR1YWxzIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgZGF5IG9mIGZvbGxvdy11cCBhZnRlciB0aGUgc3R1ZHkncyBzdGFydCBkYXRlLiBMYXN0bHksIHRoZSBzdHVkeSB3aWxsIG5vdCBjb25zaWRlciByZXBlYXRlZCBldmVudHMsIGFuZCBpbmRpdmlkdWFscyB3aWxsIGJlIGNlbnNvcmVkIGF0IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGFuIGV2ZW50LiBBZnRlciBmdWxmaWxsaW5nIHRoZSBhZm9yZW1lbnRpb25lZCByZXF1aXJlbWVudHMsIHdlIGhhdmUgYSBzdHVkeSBwb3B1bGF0aW9uIG9mIF9OXyA9IGByIG5yb3coZGZwMSlgDQoNCiMjIyBEYXRhIFByZXBlcmF0aW9uIHstI2RhdHByZXB9DQoNClByaW9yIHRvIHRoZSBhbmFseXNpcywgdmFyaW91cyB0YWJsZXMgYXJlIHByZXBhcmVkIGFuZCB0aGVuIGNvbWJpbmVkIGluIG9yZGVyIHRvIG9idGFpbiB0aGUgaW5jaWRlbmNlIHJhdGVzLiBGaXJzdCB0aGUgT0JTRVJWQVRJT05fUEVSSU9EIHRhYmxlIHdhcyBsb2FkZWQgYW5kIGluZGl2aWR1YWxzIHdobyBhcmUgbm90IGluIHRoZSBhYm92ZSBtZW50aW9uZWQgc3R1ZHkgcG9wdWxhdGlvbiwgd2lsbCBiZSByZW1vdmVkLiANCg0KQWZ0ZXIgZG9pbmcgdGhpcywgdGhlIFBFUlNPTlMgdGFibGUgd2FzIGxvYWRlZC4gSW4gdGhpcyB0YWJsZSwgYW4gYWdlIHZhcmlhYmxlIGlzIG1hZGUgd2l0aCB0aGUgYmlydGggZGF0YSB2YXJpYWJsZS4gVGhlIGFnZSB3YXMgY3JlYXRlZCB3aXRoIHRoZSBzdGFydCBvZiB0aGUgc3R1ZHkgcGVyaW9kIGFzIHJlZmVyZW5jZS4gd2l0aCB0aGlzIGFnZSB2YXJpYWJsZSwgdGhlIGZvbGxvd2luZyBhZ2UgYmFuZHMgYXJlIGNyZWF0ZWQ6IDAtMTksIDIwLTM5LCA0MC01OSwgNjAtNzkuIFRoZSBhZ2UgYmFuZCA4MCsgaXMgbm90IGNyZWF0ZWQsIGJlY2F1c2UgdGhlIHRoZXJlIGFyZSBubyBpbmRpdmlkdWFscyB3aG8gYXJlIG9sZGVyIHRoYW4gYHIgcm91bmQobWF4KHBlcnNvbnMkYWdlKSlgLiAgDQoNClRoZSBuZXh0IHN0ZXAgaW4gdGhlIGRhdGUgcHJlcGFyYXRpb24sIHdhcyBtZXJnaW5nIHRoZSBPQlNFUlZBVElPTl9QRVJJT0RTIGFuZCBQRVJTT04gdGFibGUuIFdlIG9ubHkga2VwdCB0aGUgaW5kaXZpZHVhbHMgd2hvIGFyZSBpbiB0aGUgT0JTRVJWQVRJT05fUEVSSU9EUyB0YWJsZS4gDQoNCg0KV2hlbiB0aGUgYWZvcmVtZW50aW9uZWQgdGFibGVzIGFyZSBtZXJnZWQsIENvbmNlcHQgc2V0cyB3ZXJlIGNyZWF0ZWQuIFRoZXNlIHNldHMgd2VyZSBjcmVhdGVkIGZyb20gZGlhZ25vc3RpYyBjb2RlcyBmcm9tIHRoZSBjb2Rlc2hlZXQuIEFsbCBkaWFnbm9zdGljIGNvZGVzIGFuZCB2b2NhYnVsYXJ5IG9mIHRoZSBldmVudHMgdXNlZCB0byBtYWtlIGluY2lkZW5jZSByYXRlcyBjYW4gYmUgZm91bmQgaW4gVGFibGUgXEByZWYoZmlnOmNvZGVzKQ0KDQpXaGVuIHRoZSBhZm9yZW1lbnRpb25lZCB0YWJsZXMgYXJlIG1lcmdlZCwgQ29uY2VwdCBzZXRzIHdlcmUgY3JlYXRlZC4gVGhlc2Ugc2V0cyB3ZXJlIGNyZWF0ZWQgZnJvbSBkaWFnbm9zdGljIGNvZGVzIGZyb20gdGhlIGNvZGVzaGVldC4gQWxsIGRpYWdub3N0aWMgY29kZXMgYW5kIHZvY2FidWxhcnkgb2YgdGhlIGV2ZW50cyB3ZSB3aWxsIG1ha2UgaW5jaWRlbmNlIHJhdGVzIG9mIGNhbiBiZSBmb3VuZCBpbiBUYWJsZSBcQHJlZihmaWc6Y29kZXMpLg0KDQoNCg0KDQpgYGB7ciBjb2RlcywgcmVzdWx0cz0nYXNpcycsIGZpZy5jYXAgPSAnIEFOQVBIWUwgYW5kIEdCUyBldmVudCBjb2Rlcyd9DQphbmFwaHlsIDwtIGNvZGVsaXN0ICU+JSANCiAgZmlsdGVyKGBDb2Rpbmcgc3lzdGVtYD09IGMoJ0lDRDknLCAnSUNEMTAvQ00nKSkNCg0KZ2JzIDwtIGNvZGVsaXN0MiAlPiUgDQogIGZpbHRlcihgQ29kaW5nIHN5c3RlbWA9PSBjKCdJQ0Q5JywgJ0lDRDEwL0NNJykpDQoNCmNvZGVzIDwtIGRhdGEudGFibGUoRGlhZ25vc2lzID0gcGFzdGUwKCdhbmFwaHlsXycsYW5hcGh5bCRBbGdvcml0aG0sc2VwID0gIiIpLCANCiAgICAgICAgICAgICAgICBldmVudF9jb2RlID0gYW5hcGh5bCRDb2RlLCANCiAgICAgICAgICAgICAgICBWb2NhYnVsYXJ5ID0gYW5hcGh5bCRgQ29kaW5nIHN5c3RlbWApDQoNCmdic3RlbXAgPC0gZGF0YS50YWJsZShEaWFnbm9zaXMgPSBwYXN0ZTAoJ2dic18nLGdicyRBbGdvcml0aG0sc2VwID0gIiIpLCANCiAgICAgICAgICAgICAgICBldmVudF9jb2RlID0gZ2JzJENvZGUsIA0KICAgICAgICAgICAgICAgIFZvY2FidWxhcnkgPSBnYnMkYENvZGluZyBzeXN0ZW1gKQ0KDQpjb2RlcyA8LSByYmluZChjb2RlcywgZ2JzdGVtcCkNCg0KZGF0YXRhYmxlKGNvZGVzLCANCiAgICAgICAgICBjYXB0aW9uPSdEaWFnbm9zdGljIGNvZGVzIHJldHJpZXZlZCBmcm9tIHRoZSBDb2RlTGlzdF8yMDIxMDEyOCBBTkFQSFlMIGFuZCBHQlMgc2hlZXRzICcsDQogICAgICAgICAgY2xhc3M9J2NvbXBhY3QnLCANCiAgICAgICAgICByb3duYW1lcz1GLCANCiAgICAgICAgICBjb2xuYW1lcz1jKCdEaWFnbm9zaXMnLCAnRXZlbnQgQ29kZScsICdWb2NhYnVsYXJ5JyksDQogICAgICAgICAgZXh0ZW5zaW9ucz0nQnV0dG9ucycsDQogICAgICAgICAgb3B0aW9ucyA9IGxpc3QoZG9tID0gJ0JmcnRpcCcNCiAgICAgICAgICAgICAgICAgICAgICAgICAsIGJ1dHRvbnMgPSBjKCdjb3B5JywgJ2NzdicsICdleGNlbCcsICdwZGYnLCAncHJpbnQnKQ0KICAgICAgICAgICkpIyMgRGV6ZSBvcCBsYXRlciBtb21lbnQgbm9nIHdhdCBtb29pZXIgbWFrZW4gDQoNCmBgYA0KDQoNCg0KTGFzdGx5LCB0aGUgRVZFTlRTIHRhYmxlIGlzIGxvYWRlZCwgYW5kIG1lcmdlZCB3aXRoIHRoZSBldmVudCBjb2Rlcy4gSWYgdGhlIHBlcnNvbnMgaGFkIGFuIGV2ZW50IGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIHN0dWR5LCB0aGV5IGFyZSByZW1vdmVkIGZyb20gdGhlIGRhdGFzZXQuIElmIGEgcGVyc29uIGhhcyBtb3JlIHRoYW4gb25lIGV2ZW50LCB0aGUgc2Vjb25kIGV2ZW50IGlzIHJlbW92ZWQuIA0KDQojIyMgQW5hbHlpcyB7LSNhbmFsfQ0KDQoNCkZvciB0aGUgYW5hbHlzaXMsIGluY2lkZW5jZSByYXRlcyBwZXIgMTAwMCBwZXJzb24geWVhcnMgZm9yIHRoZSBzdHVkeSBwb3B1bGF0aW9uIGFyZSBjcmVhdGVkIHBlciBldmVudCAoaS5lLiBBbmFwaHlsYWN0aWMgU2hvY2sgTmFycm93LCBBbmFwaHlsYWN0aWMgc2hvY2sgYnJvYWQsIGFuZCBnYnMpLiBUaGUgZm9ybXVsYSBmb3IgdGhlIGluY2lkZW5jZSByYXRlcyBjYW4gYmUgZm91bmQgYmVsb3c6DQoNCg0KXFsNClx0ZXh0e0luY2lkZW5jZSBSYXRlcyBvdmVyYWxsfSA9IFxmcmFje1RvdGFsIFwgbnVtYmVyIFwgb2YgXCBldmVudHN9e1RvdGFsIFwgcGVyc29uLXllYXJzfSAqIDEwMDAgDQpcXQ0KDQpBZnRlcndhcmRzLCB0aGUgaW5jaWRlbmNlIHJhdGVzIGFyZSBzdHJhdGlmaWVkIGJ5IHllYXIgYW5kIGFnZS1iYW5kcy4gVGhlIGZvcm11bGFzIGZvciB0aGVzZSBjYW4gYmUgZm91bmQgYmVsb3c6IA0KXFsNCiAgXHRleHR7SW5jaWRlbmNlIHJhdGVzIGJ5IHllYXJ9ID0gXGZyYWN7dG90YWwgXCAgbnVtYmVyIFwgb2YgXCBldmVudHMgXCBmb3IgXCBlYWNoIFwgeWVhcn0geyBwZXJzb24teWVhcnMgXCBmb3IgXCBlYWNoIFwgeWVhcn0gKiAxMDAwDQpcXQ0KDQpcWw0KICBcdGV4dHtJbmNpZGVuY2UgcmF0ZXMgYnkgeWVhciBieSBhZ2UgYmFuZHN9ID0gXGZyYWN7VG90YWwgXCBudW1iZXIgXCBvZiBcIGV2ZW50cyBmb3IgXCBlYWNoIFwgeWVhciBcICBwZXIgXCAgYWdlIFwgYmFuZH17cGVyc29uLXllYXJzIFwgZm9yIFwgZWFjaCBcIHllYXIgXCAgcGVyIFwgYWdlIFwgYmFuZH0gKiAxMDAwDQpcXQ0KDQpUbyBhc3Nlc3MgdGhlIHRlY2huaWNhbCB2YWxpZGF0aW9uLCBjb25maWRlbmNlIGludGVydmFscyBhcmUgdXNlZC4gRXhhY3QgUG9pc3NvbiBjb25maWRlbmNlIGxpbWl0cyBmb3IgdGhlIGVzdGltYXRlZCByYXRlIGFyZSBmb3VuZCBhcyB0aGUgUG9pc3NvbiBtZWFucywgZm9yIGRpc3RyaWJ1dGlvbnMgd2l0aCB0aGUgb2JzZXJ2ZWQgbnVtYmVyIG9mIGV2ZW50cyBhbmQgcHJvYmFiaWxpdGllcyByZWxldmFudCB0byB0aGUgY2hvc2VuIGNvbmZpZGVuY2UgbGV2ZWwsIGRpdmlkZWQgYnkgdGltZSBhdCByaXNrLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIFBvaXNzb24gYW5kIGNoaS1zcXVhcmUgZGlzdHJpYnV0aW9ucyBpcyBlbXBsb3llZCBoZXJlIChVbG0sIDE5OTApOg0KDQokJFlfbCA9IFxmcmFje1xjaGleMl97MlkgLCBhLzJ9fXsyfSQkDQokJFlfdT1cZnJhY3tcY2hpXjJfMihZKzEpLCAxLWEvMn17Mn0kJA0KDQp3aGVyZSBZIGlzIHRoZSBvYnNlcnZlZCBudW1iZXIgb2YgZXZlbnRzLCAkWV9sJCBhbmQgJFlfdSQgYXJlIGxvd2VyIGFuZCB1cHBlciBjb25maWRlbmNlIGxpbWl0cyBmb3IgWSByZXNwZWN0aXZlbHksICRcY2hpXjJfe3YsYX0kIGlzIHRoZSBjaGktc3F1YXJlIHF1YW50aWxlIGZvciB1cHBlciB0YWlsIHByb2JhYmlsaXR5IG9uIM69IGRlZ3JlZXMgb2YgZnJlZWRvbS4NCg0KDQoNCg0KDQojIyBSZXN1bHRzIHstI3Jlc30NCg0KYGBge3J9DQpkYXRhIDwtIGxlZnRfam9pbihkZnAxLCBwZXJzb25zLCBieSA9ICJwZXJzb25faWQiKSAjIG1lcmdlIHRoZSBPQlNFUlZBVElPTl9QRVJJT0RTIGFuZCBQRVJTT05TIHRhYmxlIChrZWVwIG9ubHkgaW5kaXZpZHVhbHMgd2hvIGFyZSBpbiBPQlNFUlZBVElPTlNfUEVSSU9EUyB0YWJsZSkNCmBgYA0KDQoNCg0KDQpgYGB7cn0NCmRmcDIgPC0gbWVyZ2UoY29kZXMsIGV2ZW50cywgYnkgPSAnZXZlbnRfY29kZScpDQpkZnAyIDwtIGRmcDIgJT4lIA0KICBmaWx0ZXIoc3RhcnRfZGF0ZV9yZWNvcmQgPiAyMDE3MDEwMSwNCiAgICAgICAgIHN0YXJ0X2RhdGVfcmVjb3JkIDwgMjAyMTAxMDEpICU+JSANCiAgYXJyYW5nZShzdGFydF9kYXRlX3JlY29yZCkNCg0KZGZwMiA8LSBkZnAyWyFkdXBsaWNhdGVkKGRmcDIkcGVyc29uX2lkKV0NCmRmcDIkZW5kX2RhdGVfcmVjb3JkIDwtIGRmcDIkc3RhcnRfZGF0ZV9yZWNvcmQNCmRmcDIkaXNfZXZlbnQgPC0gMQ0KDQpgYGANCg0KYGBge3J9DQpkZnRvdGFsIDwtIGxlZnRfam9pbihkYXRhLGRmcDIsIGJ5ID0gJ3BlcnNvbl9pZCcpDQpkZnRvdGFsJGlzX2V2ZW50W2lzLm5hKGRmdG90YWwkaXNfZXZlbnQpXSA8LSAwDQpgYGANCg0KYGBge3J9DQojIGVpbmRlIHZhbiBkZSBzdHVkaWUgcGVyaW9kZSBvcCBoZXQgbW9tZW50IGRhdCBlciBlZW4gZXZlbnQgaXMgYmlqIGVlbiBvYnNlcnZhdGllDQpkZnRvdGFsJGVuZF9pbmNpZGVuY2UgPC0gYXMuRGF0ZSh5bWQoZGZ0b3RhbCRlbmRfZGF0ZV9yZWNvcmQpKQ0KIyBXaGVuIG9ic2VydmF0aW9uIGRvZXMgbm90IGhhdmUgYW4gZXZlbnQsIG1ha2Ugc3VyZSBlbmRfaW5jaWRlbmNlIGlzIGNvZGVkIGFzIGVuZCBzdHVkeSBwZXJpb2QgKDIwMjEtMDEtMDEpDQpkZnRvdGFsJGVuZF9pbmNpZGVuY2VbaXMubmEoZGZ0b3RhbCRlbmRfaW5jaWRlbmNlKV0gPC0gYXMuRGF0ZSh5bWQoMjAyMTAxMDEpKSANCiNDYWxjdWxhdGUgaG93IG1hbnkgeWVhcnMgZWFjaCBvYnNlcnZhaXRvbiB3YXMgaW4gdGhlIHN0dWR5LiANCmRmdG90YWwkeWVhcnNfaW5fc3R1ZHkgPC0gYXMubnVtZXJpYyhkaWZmdGltZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAoZGZ0b3RhbCRlbmRfaW5jaWRlbmNlLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZnRvdGFsJHN0YXJ0X3N0dWR5LCB1bml0cz0nZGF5cycpKSAvIDM2NS4yNQ0KDQpgYGANCg0KDQpgYGB7cn0NCiNtYWtpbmcgSVIgd2l0aCA5NSUgQ0kgDQpJUl85NV9DSSA8LSBmdW5jdGlvbihldmVudHMsIHB5LCBOKXsNCiAgdG1wIDwtIGFzLm1hdHJpeChjYmluZChldmVudHMsIHB5KSkNCiAgY29uZl9pbnRzIDwtIHJvdW5kKGVwaS5jb25mKHRtcCwgY3R5cGUgPSAiaW5jLnJhdGUiLCBtZXRob2QgPSAiZXhhY3QiLCBOID0gTiwgZGVzaWduID0gMSwgDQogICBjb25mLmxldmVsID0gMC45NSkgKiAxMDAwLCAyKQ0KICByZXR1cm4oY29uZl9pbnRzKQ0KfQ0KYGBgDQoNCjwhLS0gVWxtIEsgKDE5OTApLiBBIHNpbXBsZSBtZXRob2QgdG8gY2FsY3VsYXRlIHRoZSBjb25maWRlbmNlIGludGVydmFsIG9mIGEgc3RhbmRhcmRpemVkIG1vcnRhbGl0eSByYXRpby4gQW1lcmljYW4gSm91cm5hbCBvZiBFcGlkZW1pb2xvZ3kgMTMxOiAzNzMgLSAzNzUgLS0+DQoNCg0KDQpgYGB7cn0NCiN0b3RhbCBQWSBpbiBzdHVkeSBwZXJpb2QNClRQWSA8LSBzdW0oZGZ0b3RhbCR5ZWFyc19pbl9zdHVkeSkNCg0KI2NhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIGFuYXBoIHNob2NrcyBQb3NzaWJsZSBpbiBzdHVkeSBwZXJpb2QgDQpUTkVfYW5hcGhQIDwtIGRmdG90YWwgJT4lIA0KICBmaWx0ZXIoRGlhZ25vc2lzID09ICdhbmFwaHlsX3Bvc3NpYmxlJykgJT4lIG5yb3coKQ0KDQojIEluY2lkZW5jZSBSYXRlIGZvciBhbmFwaCBzaG9jayBwb3NzaWJsZSBpbiBzdHVkeSBwZXJpb2QgDQoNCg0KaXJvX2FuYXBoUCA8LSAgSVJfOTVfQ0koVE5FX2FuYXBoUCwgVFBZLCBucm93KGRhdGEpKQ0KDQoNCiNjYWxjdWxhdGUgdGhlIGFtb3VudCBvZiBhbmFwaCBzaG9ja3MgbmFycm93IGluIHN0dWR5IHBlcmlvZCANClRORV9hbmFwaE4gPC0gZGZ0b3RhbCAlPiUgDQogIGZpbHRlcihEaWFnbm9zaXMgPT0gJ2FuYXBoeWxfbmFycm93JykgJT4lIG5yb3coKQ0KDQojIElSIGZvciBhbmFwaCBzaG9jayBuYXJyb3cgaW4gc3R1ZHkgcGVyaW9kDQppcm9fYW5hcGhOIDwtIElSXzk1X0NJKFRORV9hbmFwaE4sIFRQWSwgbnJvdyhkYXRhKSkNCg0KIyBhbW91bnQgb2YgZ2JzIGNhc2VzIGluIHN0dWR5IHBlcmlvZA0KVE5FX2dicyA8LSBkZnRvdGFsICU+JSANCiAgZmlsdGVyKERpYWdub3NpcyA9PSAnZ2JzX25hcnJvdycpICU+JSBucm93KCkNCg0KIyBJUiBmb3IgZ2JzIGluIHN0dWR5IHBlcmlvZA0KaXJvX2dicyA8LSBJUl85NV9DSShUTkVfZ2JzLCBUUFksIG5yb3coZGF0YSkpDQpgYGANCg0KDQoNCg0KYGBge3J9DQojIEFkZCBmb3IgZXZlcnkgb2JzZXJ2YXRpb25zIHdpdGggYW4gZXZlbnQgdGhlIGRhdGUgb2YgdGhlIGV2ZW50IGluIHRoZSBkYXRhc2V0LiANCmRmdG90YWwkZW5kX2luY2lkZW5jZV8yMDE3IDwtIGFzLkRhdGUoeW1kKGRmdG90YWwkZW5kX2RhdGVfcmVjb3JkKSkgDQojIGZvciBldmVyeSBvYnNlcnZ0aW9uIHdobyBkb2VzIG5vdCBoYXZlIGFuIGV2ZW50LCBtYWtlIHN1cmUgdGhlc2Ugd2lsbCBnZXQgdGhlIHN0YXJ0IG9mIDIwMTggYXMgZW5kIGRhdGUsIHNpbmNlIHdlIHdhbnQgdG8gY2FsY3VsYXRlIHRoZSBJUiBmb3IgMjAxNw0KZGZ0b3RhbCRlbmRfaW5jaWRlbmNlXzIwMTdbaXMubmEoZGZ0b3RhbCRlbmRfaW5jaWRlbmNlXzIwMTcpXSA8LSBhcy5EYXRlKHltZCgyMDE4MDEwMSkpDQoNCiMgSWYgb2JzZXJ2YXRpb24gaGFzIGFuIGV2ZW50IGFmdGVyIDIwMTcsIGl0IHdpbGwgYmVjb21lIHRoZSBlbmQgb2YgdGhlIG9icyBwZXJpb2QgKDIwMTgtMDEtMDEpDQpkZnRvdGFsJGVuZF9pbmNpZGVuY2VfMjAxNyA8LSBhcy5EYXRlKGlmZWxzZSh5ZWFyKGRmdG90YWwkZW5kX2luY2lkZW5jZV8yMDE3KSA+IDIwMTcsIGFzLkRhdGUoIjIwMTgtMDEtMDEiKSwgZGZ0b3RhbCRlbmRfaW5jaWRlbmNlXzIwMTcpLCBvcmlnaW4gPSAiMTk3MC0wMS0wMSIpDQpgYGANCg0KDQoNCmBgYHtyfQ0KIyBNYWtlIGVuZCBpbmNpZGVuY2UgZm9yIGV2ZXJ5IHllYXINCmRmXzIwMTggPC0gDQogIGRmdG90YWwgJT4lIA0KICBmaWx0ZXIoIXllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAxNykNCg0KZGZfMjAxOSA8LSANCiAgZGZfMjAxOCAlPiUgDQogIGZpbHRlcigheWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDE4KQ0KDQpkZl8yMDIwIDwtIA0KICBkZl8yMDE5ICU+JSANCiAgZmlsdGVyKCF5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMTkpDQoNCmRmXzIwMjEgPC0gDQogIGRmXzIwMjAgJT4lIA0KICBmaWx0ZXIoIXllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAyMCkgDQoNCg0KDQpgYGANCg0KDQoNCmBgYHtyfQ0KIyBjYWxjdWxhdGUgZm9yIGVhY2ggaW5kaXZpZHVhbCB0aGUgcHkgb2JzZXJ2ZWQgaW4gMjAxNy4gDQpkZnRvdGFsJHllYXJzX2luX3N0dWR5XzIwMTcgPC0gYXMubnVtZXJpYyhkaWZmdGltZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAoZGZ0b3RhbCRlbmRfaW5jaWRlbmNlXzIwMTcsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmdG90YWwkc3RhcnRfc3R1ZHksIHVuaXRzPSdkYXlzJykpIC8gMzY1DQpgYGANCg0KDQpgYGB7cn0NCiMgQ2FsY3VsYXRlIHRoZSBldmVudHMgaW4gMjAxNw0KZXZlbnRzXzIwMTcgPC0gc3Vic2V0KGRmdG90YWwsIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAxNykgDQoNCiN0aGUgVG90YWwgcGVyc29ueWVhcnMgZm9yIGFuIGV2ZW50IGluIDIwMTcNClRQWV8yMDE3IDwtIHN1bShkZnRvdGFsJHllYXJzX2luX3N0dWR5XzIwMTcpDQoNCiMgQ291bnQgdGhlIGFtb3VudCBvZiBhbmFwaHlsIHBvc3NpYmxlIHNob2NrcyBpbiAyMDE3IA0KVE5FX2FuYXBoUF8yMDE3IDwtIGV2ZW50c18yMDE3ICU+JSANCiAgZmlsdGVyKERpYWdub3NpcyA9PSAnYW5hcGh5bF9wb3NzaWJsZScpICU+JSBucm93KCkNCg0KIyBjYWxjdWxhdGUgdGhlIElSIGluIDEwMDAgUFkgZm9yIGFuYXBoeWwgcG9zc2libGUgaW4gMjAxNw0KaXJvX2FuYXBoUF8yMDE3IDwtIElSXzk1X0NJKFRORV9hbmFwaFBfMjAxNywgVFBZXzIwMTcsIG5yb3coZGZfdG90YWwpKQ0KDQoNCiMgQ291bnQgdGhlIGFtb3VudCBvZiBhbmFwaHlsIHNob2NrcyBuYXJyb3cgaW4gMjAxNyANClRORV9hbmFwaE5fMjAxNyA8LSBldmVudHNfMjAxNyAlPiUgDQogIGZpbHRlcihEaWFnbm9zaXMgPT0gJ2FuYXBoeWxfbmFycm93JykgJT4lIG5yb3coKQ0KDQojIGNhbGN1bGF0ZSB0aGUgSVIgaW4gMTAwMCBQWSBmb3IgYW5hcGh5bCBuYXJyb3cgaW4gMjAxNw0KaXJvX2FuYXBoTl8yMDE3IDwtIElSXzk1X0NJKFRORV9hbmFwaE5fMjAxNywgVFBZXzIwMTcsIG5yb3coZGZfdG90YWwpKQ0KDQojIENvdW50IHRoZSBhbW91bnQgb2YgZ2JzIGluIDIwMTcgDQpUTkVfZ2JzXzIwMTcgPC0gZXZlbnRzXzIwMTcgJT4lIA0KICBmaWx0ZXIoRGlhZ25vc2lzID09ICdnYnNfbmFycm93JykgJT4lIG5yb3coKQ0KDQojIGNhbGN1bGF0ZSB0aGUgSVIgaW4gMTAwMCBQWSBmb3IgZ2JzIGluIDIwMTcNCmlyb19nYnNfMjAxNyA8LSBJUl85NV9DSShUTkVfZ2JzXzIwMTcsIFRQWV8yMDE3LCBucm93KGRmX3RvdGFsKSkNCmBgYA0KDQoNCg0KYGBge3J9DQojIGZvciBldmVyeSBvYnNlcnZhdGlvbiB3aG8gaGFzIGFuIGV2ZW50IHB1dCBpbiB0aGUgZGF0ZS4gDQpkZl8yMDE4JGVuZF9pbmNpZGVuY2VfMjAxOCA8LSBhcy5EYXRlKHltZChkZl8yMDE4JGVuZF9kYXRlX3JlY29yZCkpDQoNCiNmb3IgZXZlcnlib2R5IHdobyBkb2VzIG5vdCBoYXZlIGFuIGV2ZW50LCBtYWtlIHN1cmUgdGhlIGVuZCBvZiBpbmNpZGVuY2UgaXMgMDEtMDEtMjAxOS4gDQpkZl8yMDE4JGVuZF9pbmNpZGVuY2VfMjAxOFtpcy5uYShkZl8yMDE4JGVuZF9pbmNpZGVuY2VfMjAxOCldIDwtIGFzLkRhdGUoeW1kKDIwMTkwMTAxKSkNCg0KIyBJZiBhbiBvYnNlcnZhdGlvbiBoYXMgdGhlIGV2ZW50IGFmdGVyIDIwMTgsIHRoZSBlbmQgb2YgdGhlIG9ic2VydmF0aW9uIHdpbGwgYmUgMDEtMDEtMjAxOQ0KZGZfMjAxOCRlbmRfaW5jaWRlbmNlXzIwMTggPC0gYXMuRGF0ZShpZmVsc2UoeWVhcihkZl8yMDE4JGVuZF9pbmNpZGVuY2VfMjAxOCkgPiAyMDE4LCBhcy5EYXRlKCIyMDE5LTAxLTAxIiksIGRmXzIwMTgkZW5kX2luY2lkZW5jZV8yMDE4KSwgb3JpZ2luID0gIjE5NzAtMDEtMDEiKQ0KZGZfMjAxOCRzdGFydF9pbmNpZGVuY2VfMjAxOCA8LSBhcy5EYXRlKHltZCgyMDE4MDEwMSkpDQoNCiMgQ291bnQgdGhlIHBlcnNvbiB5ZWFycyBvZiB0aGUgb2JzZXJ2YXRpb24gaW4gMjAxOA0KZGZfMjAxOCR5ZWFyc19pbl9zdHVkeV8yMDE4IDwtIGFzLm51bWVyaWMoZGlmZnRpbWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGRmXzIwMTgkZW5kX2luY2lkZW5jZV8yMDE4LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZl8yMDE4JHN0YXJ0X2luY2lkZW5jZV8yMDE4LCB1bml0cz0nZGF5cycpKSAvIDM2NQ0KDQpgYGANCg0KDQpgYGB7cn0NCg0KIyBBbGwgdGhlIGV2ZW50cyBpbiAyMDE4IGluIGEgbmV3IGRhdGFzZXQNCmV2ZW50c18yMDE4IDwtIHN1YnNldChkZnRvdGFsLCB5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMTgpIA0KDQojIFRvdGFsIHBlcnNvbiB5ZWFycyBvYnNlcnZlZCBpbiAyMDE4DQpUUFlfMjAxOCA8LSBzdW0oZGZfMjAxOCR5ZWFyc19pbl9zdHVkeV8yMDE4KQ0KDQojIEFtb3VudCBvZiBldmVudHMgb2YgYW5hcGh5bGF0aWMgc2hvY2sgcG9zc2libGUgaW4gMjAxOCANClRORV9hbmFwaFBfMjAxOCA8LSBldmVudHNfMjAxOCAlPiUgDQogIGZpbHRlcihEaWFnbm9zaXMgPT0gJ2FuYXBoeWxfcG9zc2libGUnKSAlPiUgbnJvdygpDQoNCiMgSW5jaWRlbmNlIHJhdGUgaW4gMTAwMCBQWSBmb3IgYW5hcGhhbHl0aWMgc2hvY2sgcG9zc2libGUgaW4gMjAxOA0KaXJvX2FuYXBoUF8yMDE4IDwtIElSXzk1X0NJKFRORV9hbmFwaFBfMjAxOCwgVFBZXzIwMTgsIG5yb3coZGZfMjAxOCkpDQoNCg0KIyBBbW91bnQgb2YgZXZlbnRzIG9mIGFuYXBoeWxhdGljIHNob2NrIG5hcnJvdyBpbiAyMDE4IA0KVE5FX2FuYXBoTl8yMDE4IDwtIGV2ZW50c18yMDE4ICU+JSANCiAgZmlsdGVyKERpYWdub3NpcyA9PSAnYW5hcGh5bF9uYXJyb3cnKSAlPiUgbnJvdygpDQoNCiMgSVIgaW4gMTAwMCBQWSBmb3IgYW5hcGhhbHl0aWMgc2hvY2sgbmFyb293IGluIDIwMTgNCmlyb19hbmFwaE5fMjAxOCA8LSAgSVJfOTVfQ0koVE5FX2FuYXBoTl8yMDE4LCBUUFlfMjAxOCwgbnJvdyhkZl8yMDE4KSkNCg0KDQojIEFtb3VudCBvZiBldmVudHMgb2YgR0JTIGluIDIwMTggDQpUTkVfZ2JzXzIwMTggPC0gZXZlbnRzXzIwMTggJT4lIA0KICBmaWx0ZXIoRGlhZ25vc2lzID09ICdnYnNfbmFycm93JykgJT4lIG5yb3coKQ0KDQojSVIgZm9yIGdicyBpbiAxMDAwIFBZDQppcm9fZ2JzXzIwMTggPC0gIElSXzk1X0NJKFRORV9nYnNfMjAxOCwgVFBZXzIwMTgsIG5yb3coZGZfMjAxOCkpDQpgYGANCg0KDQoNCg0KYGBge3J9DQojIGZvciBldmVyeSBvYnNlcnZhdGlvbiB3aG8gaGFzIGFuIGV2ZW50IHB1dCBpbiB0aGUgZGF0ZS4gDQpkZl8yMDE5JGVuZF9pbmNpZGVuY2VfMjAxOSA8LSBhcy5EYXRlKHltZChkZl8yMDE5JGVuZF9kYXRlX3JlY29yZCkpDQoNCiNmb3IgZXZlcnlib2R5IHdobyBkb2VzIG5vdCBoYXZlIGFuIGV2ZW50LCBtYWtlIHN1cmUgdGhlIGVuZCBvZiBpbmNpZGVuY2UgaXMgMDEtMDEtMjAxOS4gDQpkZl8yMDE5JGVuZF9pbmNpZGVuY2VfMjAxOVtpcy5uYShkZl8yMDE5JGVuZF9pbmNpZGVuY2VfMjAxOSldIDwtIGFzLkRhdGUoeW1kKDIwMjAwMTAxKSkNCg0KIyBJZiBhbiBvYnNlcnZhdGlvbiBoYXMgdGhlIGV2ZW50IGFmdGVyIDIwMTgsIHRoZSBlbmQgb2YgdGhlIG9ic2VydmF0aW9uIHdpbGwgYmUgMDEtMDEtMjAxOQ0KZGZfMjAxOSRlbmRfaW5jaWRlbmNlXzIwMTkgPC0gYXMuRGF0ZShpZmVsc2UoeWVhcihkZl8yMDE5JGVuZF9pbmNpZGVuY2VfMjAxOSkgPiAyMDE5LCBhcy5EYXRlKCIyMDIwLTAxLTAxIiksIGRmXzIwMTkkZW5kX2luY2lkZW5jZV8yMDE5KSwgb3JpZ2luID0gIjE5NzAtMDEtMDEiKQ0KZGZfMjAxOSRzdGFydF9pbmNpZGVuY2VfMjAxOSA8LSBhcy5EYXRlKHltZCgyMDE5MDEwMSkpDQoNCiMgQ291bnQgdGhlIHBlcnNvbiB5ZWFycyBvZiB0aGUgb2JzZXJ2YXRpb24gaW4gMjAxOA0KZGZfMjAxOSR5ZWFyc19pbl9zdHVkeV8yMDE5IDwtIGFzLm51bWVyaWMoZGlmZnRpbWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGRmXzIwMTkkZW5kX2luY2lkZW5jZV8yMDE5LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZl8yMDE5JHN0YXJ0X2luY2lkZW5jZV8yMDE5LCB1bml0cz0nZGF5cycpKSAvIDM2NQ0KDQpgYGANCg0KDQpgYGB7cn0NCg0KIyBBbGwgdGhlIGV2ZW50cyBpbiAyMDE5IGluIGEgbmV3IGRhdGFzZXQNCmV2ZW50c18yMDE5IDwtIHN1YnNldChkZnRvdGFsLCB5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMTkpIA0KDQojIFRvdGFsIHBlcnNvbiB5ZWFycyBvYnNlcnZlZCBpbiAyMDE5DQpUUFlfMjAxOSA8LSBzdW0oZGZfMjAxOSR5ZWFyc19pbl9zdHVkeV8yMDE5KQ0KDQojIEFtb3VudCBvZiBldmVudHMgb2YgYW5hcGh5bGF0aWMgc2hvY2sgcG9zc2libGUgaW4gMjAxOSANClRORV9hbmFwaFBfMjAxOSA8LSBldmVudHNfMjAxOSAlPiUgDQogIGZpbHRlcihEaWFnbm9zaXMgPT0gJ2FuYXBoeWxfcG9zc2libGUnKSAlPiUgbnJvdygpDQoNCiMgSW5jaWRlbmNlIHJhdGUgaW4gMTAwMCBQWSBmb3IgYW5hcGhhbHl0aWMgc2hvY2sgcG9zc2libGUgaW4gMjAxOQ0KaXJvX2FuYXBoUF8yMDE5IDwtICBJUl85NV9DSShUTkVfYW5hcGhQXzIwMTksIFRQWV8yMDE5LCBucm93KGRmXzIwMTkpKQ0KDQoNCiMgQW1vdW50IG9mIGV2ZW50cyBvZiBhbmFwaHlsYXRpYyBzaG9jayBuYXJyb3cgaW4gMjAxOSANClRORV9hbmFwaE5fMjAxOSA8LSBldmVudHNfMjAxOSAlPiUgDQogIGZpbHRlcihEaWFnbm9zaXMgPT0gJ2FuYXBoeWxfbmFycm93JykgJT4lIG5yb3coKQ0KDQojIElSIGluIDEwMDAgUFkgZm9yIGFuYXBoYWx5dGljIHNob2NrIG5hcm9vdyBpbiAyMDE5DQppcm9fYW5hcGhOXzIwMTkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoTl8yMDE5LCBUUFlfMjAxOSwgbnJvdyhkZl8yMDE5KSkNCg0KDQojIEFtb3VudCBvZiBldmVudHMgb2YgR0JTIGluIDIwMTkgDQpUTkVfZ2JzXzIwMTkgPC0gZXZlbnRzXzIwMTkgJT4lIA0KICBmaWx0ZXIoRGlhZ25vc2lzID09ICdnYnNfbmFycm93JykgJT4lIG5yb3coKQ0KDQojSVIgZm9yIGdicyBpbiAxMDAwIFBZDQppcm9fZ2JzXzIwMTkgPC0gSVJfOTVfQ0koVE5FX2dic18yMDE5LCBUUFlfMjAxOSwgbnJvdyhkZl8yMDE5KSkNCmBgYA0KDQoNCmBgYHtyfQ0KIyBmb3IgZXZlcnkgb2JzZXJ2YXRpb24gd2hvIGhhcyBhbiBldmVudCBwdXQgaW4gdGhlIGRhdGUuIA0KZGZfMjAyMCRlbmRfaW5jaWRlbmNlXzIwMjAgPC0gYXMuRGF0ZSh5bWQoZGZfMjAyMCRlbmRfZGF0ZV9yZWNvcmQpKQ0KDQojZm9yIGV2ZXJ5Ym9keSB3aG8gZG9lcyBub3QgaGF2ZSBhbiBldmVudCwgbWFrZSBzdXJlIHRoZSBlbmQgb2YgaW5jaWRlbmNlIGlzIDAxLTAxLTIwMjEuIA0KZGZfMjAyMCRlbmRfaW5jaWRlbmNlXzIwMjBbaXMubmEoZGZfMjAyMCRlbmRfaW5jaWRlbmNlXzIwMjApXSA8LSBhcy5EYXRlKHltZCgyMDIxMDEwMSkpDQoNCiMgSWYgYW4gb2JzZXJ2YXRpb24gaGFzIHRoZSBldmVudCBhZnRlciAyMDE4LCB0aGUgZW5kIG9mIHRoZSBvYnNlcnZhdGlvbiB3aWxsIGJlIDAxLTAxLTIwMjANCmRmXzIwMjAkZW5kX2luY2lkZW5jZV8yMDIwIDwtIGFzLkRhdGUoaWZlbHNlKHllYXIoZGZfMjAyMCRlbmRfaW5jaWRlbmNlXzIwMjApID4gMjAyMCwgYXMuRGF0ZSgiMjAyMS0wMS0wMSIpLCBkZl8yMDIwJGVuZF9pbmNpZGVuY2VfMjAyMCksIG9yaWdpbiA9ICIxOTcwLTAxLTAxIikNCmRmXzIwMjAkc3RhcnRfaW5jaWRlbmNlXzIwMjAgPC0gYXMuRGF0ZSh5bWQoMjAyMDAxMDEpKQ0KDQojIENvdW50IHRoZSBwZXJzb24geWVhcnMgb2YgdGhlIG9ic2VydmF0aW9uIGluIDIwMTgNCmRmXzIwMjAkeWVhcnNfaW5fc3R1ZHlfMjAyMCA8LSBhcy5udW1lcmljKGRpZmZ0aW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgIChkZl8yMDIwJGVuZF9pbmNpZGVuY2VfMjAyMCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGZfMjAyMCRzdGFydF9pbmNpZGVuY2VfMjAyMCwgdW5pdHM9J2RheXMnKSkgLyAzNjYNCg0KYGBgDQoNCg0KYGBge3J9DQoNCiMgQWxsIHRoZSBldmVudHMgaW4gMjAyMCBpbiBhIG5ldyBkYXRhc2V0DQpldmVudHNfMjAyMCA8LSBzdWJzZXQoZGZ0b3RhbCwgeWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDIwKSANCg0KIyBUb3RhbCBwZXJzb24geWVhcnMgb2JzZXJ2ZWQgaW4gMjAyMA0KVFBZXzIwMjAgPC0gc3VtKGRmXzIwMjAkeWVhcnNfaW5fc3R1ZHlfMjAyMCkNCg0KIyBBbW91bnQgb2YgZXZlbnRzIG9mIGFuYXBoeWxhdGljIHNob2NrIHBvc3NpYmxlIGluIDIwMjAgDQpUTkVfYW5hcGhQXzIwMjAgPC0gZXZlbnRzXzIwMjAgJT4lIA0KICBmaWx0ZXIoRGlhZ25vc2lzID09ICdhbmFwaHlsX3Bvc3NpYmxlJykgJT4lIG5yb3coKQ0KDQojIEluY2lkZW5jZSByYXRlIGluIDEwMDAgUFkgZm9yIGFuYXBoYWx5dGljIHNob2NrIHBvc3NpYmxlIGluIDIwMjANCmlyb19hbmFwaFBfMjAyMCA8LSBJUl85NV9DSShUTkVfYW5hcGhQXzIwMjAsIFRQWV8yMDIwLCBucm93KGRmXzIwMjApKQ0KDQoNCiMgQW1vdW50IG9mIGV2ZW50cyBvZiBhbmFwaHlsYXRpYyBzaG9jayBuYXJyb3cgaW4gMjAyMCANClRORV9hbmFwaE5fMjAyMCA8LSBldmVudHNfMjAyMCAlPiUgDQogIGZpbHRlcihEaWFnbm9zaXMgPT0gJ2FuYXBoeWxfbmFycm93JykgJT4lIG5yb3coKQ0KDQojIElSIGluIDEwMDAgUFkgZm9yIGFuYXBoYWx5dGljIHNob2NrIG5hcm9vdyBpbiAyMDIwDQppcm9fYW5hcGhOXzIwMjAgPC0gSVJfOTVfQ0koVE5FX2FuYXBoTl8yMDIwLCBUUFlfMjAyMCwgbnJvdyhkZl8yMDIwKSkNCg0KDQojIEFtb3VudCBvZiBldmVudHMgb2YgR0JTIGluIDIwMjAgDQpUTkVfZ2JzXzIwMjAgPC0gZXZlbnRzXzIwMjAgJT4lIA0KICBmaWx0ZXIoRGlhZ25vc2lzID09ICdnYnNfbmFycm93JykgJT4lIG5yb3coKQ0KDQojSVIgZm9yIGdicyBpbiAxMDAwIFBZDQppcm9fZ2JzXzIwMjAgPC0gSVJfOTVfQ0koVE5FX2dic18yMDIwLCBUUFlfMjAyMCwgbnJvdyhkZl8yMDIwKSkNCmBgYA0KDQoNCmBgYHtyfQ0KRGlhZ25vc2lzIDwtIGMoJ2FuYXBoeWxheGlzX25hcnJvdycsICdhbmFwaHlsYXhpc19uYXJyb3cnLCAnYW5hcGh5bGF4aXNfbmFycm93JywgJ2FuYXBoeWxheGlzX25hcnJvdycsJ2FuYXBoeWxheGlzX25hcnJvdycsICdhbmFwaHlsYXhpc19wb3NzaWJsZScsICdhbmFwaHlsYXhpc19wb3NzaWJsZScsICdhbmFwaHlsYXhpc19wb3NzaWJsZScsICdhbmFwaHlsYXhpc19wb3NzaWJsZScsICdhbmFwaHlsYXhpc19wb3NzaWJsZScsICdnYnNfbmFycm93JywgJ2dic19uYXJyb3cnLCAnZ2JzX25hcnJvdycsICdnYnNfbmFycm93JywgJ2dic19uYXJyb3cnKQ0KWWVhcnMgPC0gYygnVG90YWwnLCAnMjAxNycsICcyMDE4JywgJzIwMTknLCAnMjAyMCcsDQogICAgICAgICAgICdUb3RhbCcsICcyMDE3JywgJzIwMTgnLCAnMjAxOScsICcyMDIwJywNCiAgICAgICAgICAgJ1RvdGFsJywgJzIwMTcnLCAnMjAxOCcsICcyMDE5JywgJzIwMjAnKQ0KDQpJUiA8LSBjKGlyb19hbmFwaE4sIGlyb19hbmFwaE5fMjAxNywgaXJvX2FuYXBoTl8yMDE4LCBpcm9fYW5hcGhOXzIwMTksIGlyb19hbmFwaE5fMjAyMCwgaXJvX2FuYXBoUCwNCiAgICAgICAgaXJvX2FuYXBoUF8yMDE3LCBpcm9fYW5hcGhQXzIwMTgsIGlyb19hbmFwaFBfMjAxOSwgaXJvX2FuYXBoUF8yMDIwLCBpcm9fZ2JzLCBpcm9fZ2JzXzIwMTcsIGlyb19nYnNfMjAxOCwgaXJvX2dic18yMDE5LCBpcm9fZ2JzXzIwMjApDQoNCg0KdGFiIDwtIGRhdGEuZnJhbWUoRGlhZ25vc2lzID0gRGlhZ25vc2lzLCBZZWFyID0gWWVhcnMsICdJUiBwZXIgMTAwMCBweScgPSBJUikNCmBgYA0KDQoNCmBgYHtyfQ0KDQptYWtlX3llYXJfYWdlX2JhbmRzIDwtIGZ1bmN0aW9uKGRhdGEsIGFnZV9ncm91cCkgew0KICBuZXdfZGF0YSA8LSBkYXRhICU+JSANCiAgICBmaWx0ZXIoYWdlX2JhbmRzPT1hZ2VfZ3JvdXApIA0KICByZXR1cm4obmV3X2RhdGEpDQogIH0NCg0KDQpkZnRvdGFsMDAxOSA8LSBtYWtlX3llYXJfYWdlX2JhbmRzKGRmdG90YWwsICdbMCwxOV0nKQ0KZGZ0b3RhbDIwMzkgPC0gbWFrZV95ZWFyX2FnZV9iYW5kcyhkZnRvdGFsLCAnWzIwLDM5XScpDQpkZnRvdGFsNDA1OSA8LSBtYWtlX3llYXJfYWdlX2JhbmRzKGRmdG90YWwsICdbNDAsNTldJykNCmRmdG90YWw2MDc5IDwtIG1ha2VfeWVhcl9hZ2VfYmFuZHMoZGZ0b3RhbCwgJ1s2MCw3OV0nKQ0KZGZ0b3RhbDgwIDwtIG1ha2VfeWVhcl9hZ2VfYmFuZHMoZGZ0b3RhbCwgJ1s4MCtdJykNCg0KYGBgDQoNCg0KYGBge3J9DQojIE1ha2UgZnVuY3Rpb24gdG8gY2FsY3VsYXRlIGFtb3VudCBvZiBldmVudHMNCmFtb3VudF9ldmVudHMgPC0gZnVuY3Rpb24oZGF0YSwgZGlhZ24pIHsNCiAgZXZlbnRzIDwtIGRhdGEgJT4lIA0KICAgIGZpbHRlcihEaWFnbm9zaXMgPT0gZGlhZ24pICU+JSAgbnJvdygpDQogIHJldHVybihldmVudHMpDQp9DQpgYGANCg0KDQpgYGB7cn0NCiN0b3RhbCBwZXJzb255ZWFycyBpbiBzdHVkeSBmb3IgYWdlYmFuZCAwLTE5DQpUUFkwMDE5IDwtIHN1bShkZnRvdGFsMDAxOSR5ZWFyc19pbl9zdHVkeSkNCiMgYW1vdW50IG9mIGV2ZW50cyBmb3IgZWFjaCBldmVudCBmb3IgYWdlX2JhbmQgMC0xOQ0KVE5FX2FuYXBoUDAwMTkgPC0gYW1vdW50X2V2ZW50cyhkZnRvdGFsMDAxOSwgJ2FuYXBoeWxfcG9zc2libGUnKQ0KVE5FX2FuYXBoTjAwMTkgPC0gYW1vdW50X2V2ZW50cyhkZnRvdGFsMDAxOSwgJ2FuYXBoeWxfbmFycm93JykNClRORV9nYnMwMDE5IDwtIGFtb3VudF9ldmVudHMoZGZ0b3RhbDAwMTksICdnYnNfbmFycm93JykNCg0KI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSANCmlyb19hbmFwaFAwMDE5IDwtIElSXzk1X0NJKFRORV9hbmFwaFAwMDE5LCBUUFkwMDE5LCBucm93KGRmdG90YWwwMDE5KSkNCmlyb19hbmFwaE4wMDE5IDwtIElSXzk1X0NJKFRORV9hbmFwaE4wMDE5LCBUUFkwMDE5LCBucm93KGRmdG90YWwwMDE5KSkNCmlyb19nYnMwMDE5IDwtIElSXzk1X0NJKFRORV9nYnMwMDE5LCBUUFkwMDE5LCBucm93KGRmdG90YWwwMDE5KSkNCmBgYA0KDQpgYGB7cn0NCiN0b3RhbCBwZXJzb255ZWFycyBpbiBzdHVkeSBmb3IgYWdlYmFuZCAyMC0zOQ0KVFBZMjAzOSA8LSBzdW0oZGZ0b3RhbDIwMzkkeWVhcnNfaW5fc3R1ZHkpDQojIGFtb3VudCBvZiBldmVudHMgZm9yIGVhY2ggZXZlbnQgZm9yIGFnZV9iYW5kIDIwLTM5DQpUTkVfYW5hcGhQMjAzOSA8LSBhbW91bnRfZXZlbnRzKGRmdG90YWwyMDM5LCAnYW5hcGh5bF9wb3NzaWJsZScpDQpUTkVfYW5hcGhOMjAzOSA8LSBhbW91bnRfZXZlbnRzKGRmdG90YWwyMDM5LCAnYW5hcGh5bF9uYXJyb3cnKQ0KVE5FX2diczIwMzkgPC0gYW1vdW50X2V2ZW50cyhkZnRvdGFsMjAzOSwgJ2dic19uYXJyb3cnKQ0KDQojSVIgZm9yIGVhY2ggZXZlbnQgaW4gMTAwMFBZIGZvciBhZ2VfYmFuZCAyMC0zOSANCmlyb19hbmFwaFAyMDM5IDwtIElSXzk1X0NJKFRORV9hbmFwaFAyMDM5LCBUUFkyMDM5LCBucm93KGRmdG90YWwyMDM5KSkNCmlyb19hbmFwaE4yMDM5IDwtIElSXzk1X0NJKFRORV9hbmFwaE4yMDM5LCBUUFkyMDM5LCBucm93KGRmdG90YWwyMDM5KSkNCmlyb19nYnMyMDM5IDwtIElSXzk1X0NJKFRORV9nYnMyMDM5LCBUUFkyMDM5LCBucm93KGRmdG90YWwyMDM5KSkNCmBgYA0KDQpgYGB7cn0NCiN0b3RhbCBwZXJzb255ZWFycyBpbiBzdHVkeSBmb3IgYWdlYmFuZCAwLTE5DQpUUFk0MDU5IDwtIHN1bShkZnRvdGFsNDA1OSR5ZWFyc19pbl9zdHVkeSkNCiMgYW1vdW50IG9mIGV2ZW50cyBmb3IgZWFjaCBldmVudCBmb3IgYWdlX2JhbmQgMC0xOQ0KVE5FX2FuYXBoUDQwNTkgPC0gYW1vdW50X2V2ZW50cyhkZnRvdGFsNDA1OSwgJ2FuYXBoeWxfcG9zc2libGUnKQ0KVE5FX2FuYXBoTjQwNTkgPC0gYW1vdW50X2V2ZW50cyhkZnRvdGFsNDA1OSwgJ2FuYXBoeWxfbmFycm93JykNClRORV9nYnM0MDU5IDwtIGFtb3VudF9ldmVudHMoZGZ0b3RhbDQwNTksICdnYnNfbmFycm93JykNCg0KI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSANCmlyb19hbmFwaFA0MDU5IDwtIElSXzk1X0NJKFRORV9hbmFwaFA0MDU5LCBUUFk0MDU5LCBucm93KGRmdG90YWw0MDU5KSkNCmlyb19hbmFwaE40MDU5IDwtIElSXzk1X0NJKFRORV9hbmFwaE40MDU5LCBUUFk0MDU5LCBucm93KGRmdG90YWw0MDU5KSkNCmlyb19nYnM0MDU5IDwtIElSXzk1X0NJKFRORV9nYnM0MDU5LCBUUFk0MDU5LCBucm93KGRmdG90YWw0MDU5KSkNCmBgYA0KDQpgYGB7cn0NCiN0b3RhbCBwZXJzb255ZWFycyBpbiBzdHVkeSBmb3IgYWdlYmFuZCAwLTE5DQpUUFk2MDc5IDwtIHN1bShkZnRvdGFsNjA3OSR5ZWFyc19pbl9zdHVkeSkNCiMgYW1vdW50IG9mIGV2ZW50cyBmb3IgZWFjaCBldmVudCBmb3IgYWdlX2JhbmQgMC0xOQ0KVE5FX2FuYXBoUDYwNzkgPC0gYW1vdW50X2V2ZW50cyhkZnRvdGFsNjA3OSwgJ2FuYXBoeWxfcG9zc2libGUnKQ0KVE5FX2FuYXBoTjYwNzkgPC0gYW1vdW50X2V2ZW50cyhkZnRvdGFsNjA3OSwgJ2FuYXBoeWxfbmFycm93JykNClRORV9nYnM2MDc5IDwtIGFtb3VudF9ldmVudHMoZGZ0b3RhbDYwNzksICdnYnNfbmFycm93JykNCg0KI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSANCmlyb19hbmFwaFA2MDc5IDwtIElSXzk1X0NJKFRORV9hbmFwaFA2MDc5LCBUUFk2MDc5LCBucm93KGRmdG90YWw2MDc5KSkNCmlyb19hbmFwaE42MDc5IDwtIElSXzk1X0NJKFRORV9hbmFwaE42MDc5LCBUUFk2MDc5LCBucm93KGRmdG90YWw2MDc5KSkNCmlyb19nYnM2MDc5IDwtIElSXzk1X0NJKFRORV9nYnM2MDc5LCBUUFk2MDc5LCBucm93KGRmdG90YWw2MDc5KSkNCmBgYA0KDQoNCg0KYGBge3J9DQojRXZlbnRzIGluIDIwMTcgZm9yIGFnZSBncm91cCAwMC0xOQ0KZXZlbnRzXzIwMTdfMDAxOSA8LSBzdWJzZXQoZGZ0b3RhbDAwMTksIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAxNykgDQojdGhlIFRvdGFsIHBlcnNvbnllYXJzIGZvciBhbiBldmVudCBpbiAyMDE3IGFnZV9iYW5kMDAxOQ0KVFBZXzIwMTdfMDAxOSA8LSBzdW0oZGZ0b3RhbDAwMTkkeWVhcnNfaW5fc3R1ZHlfMjAxNykNCg0KIyBDb3VudCB0aGVudW1iZXIgb2YgZXZlbnRzIGZvciBhZ2VfYmFuZCAwMDE5IGluIDIwMTcNClRORV9hbmFwaFBfMDAxOV8yMDE3IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTdfMDAxOSwgJ2FuYXBoeWxfcG9zc2libGUnKQ0KVE5FX2FuYXBoTl8wMDE5XzIwMTcgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxN18wMDE5LCAnYW5hcGh5bF9uYXJyb3cnKQ0KVE5FX2dic18wMDE5XzIwMTcgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxN18wMDE5LCAnZ2JzX25hcnJvdycpDQoNCiNJUiBmb3IgZWFjaCBldmVudCBpbiAxMDAwUFkgZm9yIGFnZV9iYW5kIDAtMTkgDQppcm9fYW5hcGhQXzAwMTlfMjAxNyA8LSBJUl85NV9DSShUTkVfYW5hcGhQXzAwMTlfMjAxNywgVFBZXzIwMTdfMDAxOSwgbnJvdyhkZnRvdGFsMDAxOSkpDQppcm9fYW5hcGhOXzAwMTlfMjAxNyA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzAwMTlfMjAxNywgVFBZXzIwMTdfMDAxOSwgbnJvdyhkZnRvdGFsMDAxOSkpDQppcm9fZ2JzXzAwMTlfMjAxNyA8LSBJUl85NV9DSShUTkVfZ2JzXzAwMTlfMjAxNywgVFBZXzIwMTdfMDAxOSwgbnJvdyhkZnRvdGFsMDAxOSkpDQpgYGANCg0KYGBge3J9DQojRXZlbnRzIGluIDIwMTcgZm9yIGFnZSBncm91cCAwMC0xOQ0KZXZlbnRzXzIwMTdfMjAzOSA8LSBzdWJzZXQoZGZ0b3RhbDIwMzksIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAxNykgDQojdGhlIFRvdGFsIHBlcnNvbnllYXJzIGZvciBhbiBldmVudCBpbiAyMDE3IGFnZV9iYW5kMjAzOQ0KVFBZXzIwMTdfMjAzOSA8LSBzdW0oZGZ0b3RhbDIwMzkkeWVhcnNfaW5fc3R1ZHlfMjAxNykNCg0KIyBDb3VudCB0aGVudW1iZXIgb2YgZXZlbnRzIGZvciBhZ2VfYmFuZCAyMDM5IGluIDIwMTcNClRORV9hbmFwaFBfMjAzOV8yMDE3IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTdfMjAzOSwgJ2FuYXBoeWxfcG9zc2libGUnKQ0KVE5FX2FuYXBoTl8yMDM5XzIwMTcgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxN18yMDM5LCAnYW5hcGh5bF9uYXJyb3cnKQ0KVE5FX2dic18yMDM5XzIwMTcgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxN18yMDM5LCAnZ2JzX25hcnJvdycpDQoNCiNJUiBmb3IgZWFjaCBldmVudCBpbiAxMDAwUFkgZm9yIGFnZV9iYW5kIDAtMTkgDQppcm9fYW5hcGhQXzIwMzlfMjAxNyA8LSBJUl85NV9DSShUTkVfYW5hcGhQXzIwMzlfMjAxNywgVFBZXzIwMTdfMjAzOSwgbnJvdyhkZnRvdGFsMjAzOSkpDQppcm9fYW5hcGhOXzIwMzlfMjAxNyA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzIwMzlfMjAxNywgVFBZXzIwMTdfMjAzOSwgbnJvdyhkZnRvdGFsMjAzOSkpDQppcm9fZ2JzXzIwMzlfMjAxNyA8LSBJUl85NV9DSShUTkVfZ2JzXzIwMzlfMjAxNywgVFBZXzIwMTdfMjAzOSwgbnJvdyhkZnRvdGFsMjAzOSkpDQpgYGANCg0KYGBge3J9DQojRXZlbnRzIGluIDIwMTcgZm9yIGFnZSBncm91cCAwMC0xOQ0KZXZlbnRzXzIwMTdfNDA1OSA8LSBzdWJzZXQoZGZ0b3RhbDQwNTksIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAxNykgDQojdGhlIFRvdGFsIHBlcnNvbnllYXJzIGZvciBhbiBldmVudCBpbiAyMDE3IGFnZV9iYW5kNDA1OQ0KVFBZXzIwMTdfNDA1OSA8LSBzdW0oZGZ0b3RhbDQwNTkkeWVhcnNfaW5fc3R1ZHlfMjAxNykNCg0KIyBDb3VudCB0aGVudW1iZXIgb2YgZXZlbnRzIGZvciBhZ2VfYmFuZCA0MDU5IGluIDIwMTcNClRORV9hbmFwaFBfNDA1OV8yMDE3IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTdfNDA1OSwgJ2FuYXBoeWxfcG9zc2libGUnKQ0KVE5FX2FuYXBoTl80MDU5XzIwMTcgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxN180MDU5LCAnYW5hcGh5bF9uYXJyb3cnKQ0KVE5FX2dic180MDU5XzIwMTcgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxN180MDU5LCAnZ2JzX25hcnJvdycpDQoNCiNJUiBmb3IgZWFjaCBldmVudCBpbiAxMDAwUFkgZm9yIGFnZV9iYW5kIDAtMTkgDQppcm9fYW5hcGhQXzQwNTlfMjAxNyA8LSBJUl85NV9DSShUTkVfYW5hcGhQXzQwNTlfMjAxNywgVFBZXzIwMTdfNDA1OSwgbnJvdyhkZnRvdGFsNDA1OSkpDQppcm9fYW5hcGhOXzQwNTlfMjAxNyA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzQwNTlfMjAxNywgVFBZXzIwMTdfNDA1OSwgbnJvdyhkZnRvdGFsNDA1OSkpDQppcm9fZ2JzXzQwNTlfMjAxNyA8LSBJUl85NV9DSShUTkVfZ2JzXzQwNTlfMjAxNywgVFBZXzIwMTdfNDA1OSwgbnJvdyhkZnRvdGFsNDA1OSkpDQpgYGANCg0KYGBge3J9DQojRXZlbnRzIGluIDIwMTcgZm9yIGFnZSBncm91cCAwMC0xOQ0KZXZlbnRzXzIwMTdfNjA3OSA8LSBzdWJzZXQoZGZ0b3RhbDYwNzksIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAxNykgDQojdGhlIFRvdGFsIHBlcnNvbnllYXJzIGZvciBhbiBldmVudCBpbiAyMDE3IGFnZV9iYW5kNjA3OQ0KVFBZXzIwMTdfNjA3OSA8LSBzdW0oZGZ0b3RhbDYwNzkkeWVhcnNfaW5fc3R1ZHlfMjAxNykNCg0KIyBDb3VudCB0aGVudW1iZXIgb2YgZXZlbnRzIGZvciBhZ2VfYmFuZCA2MDc5IGluIDIwMTcNClRORV9hbmFwaFBfNjA3OV8yMDE3IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTdfNjA3OSwgJ2FuYXBoeWxfcG9zc2libGUnKQ0KVE5FX2FuYXBoTl82MDc5XzIwMTcgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxN182MDc5LCAnYW5hcGh5bF9uYXJyb3cnKQ0KVE5FX2dic182MDc5XzIwMTcgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxN182MDc5LCAnZ2JzX25hcnJvdycpDQoNCiNJUiBmb3IgZWFjaCBldmVudCBpbiAxMDAwUFkgZm9yIGFnZV9iYW5kIDAtMTkgDQppcm9fYW5hcGhQXzYwNzlfMjAxNyA8LSBJUl85NV9DSShUTkVfYW5hcGhQXzYwNzlfMjAxNywgVFBZXzIwMTdfNjA3OSwgbnJvdyhkZnRvdGFsNjA3OSkpDQppcm9fYW5hcGhOXzYwNzlfMjAxNyA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzYwNzlfMjAxNywgVFBZXzIwMTdfNjA3OSwgbnJvdyhkZnRvdGFsNjA3OSkpDQppcm9fZ2JzXzYwNzlfMjAxNyA8LSBJUl85NV9DSShUTkVfZ2JzXzYwNzlfMjAxNywgVFBZXzIwMTdfNjA3OSwgbnJvdyhkZnRvdGFsNjA3OSkpDQpgYGANCg0KDQoNCmBgYHtyfQ0KZGZfMjAxOF8wMDE5IDwtIG1ha2VfeWVhcl9hZ2VfYmFuZHMoZGZfMjAxOCwgJ1swLDE5XScpDQpkZl8yMDE4XzIwMzkgPC0gbWFrZV95ZWFyX2FnZV9iYW5kcyhkZl8yMDE4LCAnWzIwLDM5XScpDQpkZl8yMDE4XzQwNTkgPC0gbWFrZV95ZWFyX2FnZV9iYW5kcyhkZl8yMDE4LCAnWzQwLDU5XScpDQpkZl8yMDE4XzYwNzkgPC0gbWFrZV95ZWFyX2FnZV9iYW5kcyhkZl8yMDE4LCAnWzYwLDc5XScpDQpgYGANCg0KDQpgYGB7cn0NCiNFdmVudHMgaW4gMjAxNyBmb3IgYWdlIGdyb3VwIDAwLTE5DQpldmVudHNfMjAxOF8wMDE5IDwtIHN1YnNldChkZl8yMDE4XzAwMTksIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAxOCkgDQojdGhlIF8yMDE4XyBwZXJzb255ZWFycyBmb3IgYW4gZXZlbnQgaW4gMjAxOCBhZ2VfYmFuZDAwMTkNClRQWV8yMDE4XzAwMTkgPC0gc3VtKGRmXzIwMThfMDAxOSR5ZWFyc19pbl9zdHVkeV8yMDE4KQ0KDQojIENvdW50IHRoZW51bWJlciBvZiBldmVudHMgZm9yIGFnZV9iYW5kIDAwMTkgaW4gMjAxOA0KVE5FX2FuYXBoUF8wMDE5XzIwMTggPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxOF8wMDE5LCAnYW5hcGh5bF9wb3NzaWJsZScpDQpUTkVfYW5hcGhOXzAwMTlfMjAxOCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE4XzAwMTksICdhbmFwaHlsX25hcnJvdycpDQpUTkVfZ2JzXzAwMTlfMjAxOCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE4XzAwMTksICdnYnNfbmFycm93JykNCg0KI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSANCmlyb19hbmFwaFBfMDAxOV8yMDE4IDwtIElSXzk1X0NJKFRORV9hbmFwaFBfMDAxOV8yMDE4LCBUUFlfMjAxOF8wMDE5LCBucm93KGRmXzIwMThfMDAxOSkpDQppcm9fYW5hcGhOXzAwMTlfMjAxOCA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzAwMTlfMjAxOCwgVFBZXzIwMThfMDAxOSwgbnJvdyhkZl8yMDE4XzAwMTkpKQ0KaXJvX2dic18wMDE5XzIwMTggPC0gSVJfOTVfQ0koVE5FX2dic18wMDE5XzIwMTgsIFRQWV8yMDE4XzAwMTksIG5yb3coZGZfMjAxOF8wMDE5KSkNCmBgYA0KDQpgYGB7cn0NCiNFdmVudHMgaW4gMjAxOCBmb3IgYWdlIGdyb3VwIDAwLTE5DQpldmVudHNfMjAxOF8yMDM5IDwtIHN1YnNldChkZl8yMDE4XzIwMzksIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAxOCkgDQojdGhlIF8yMDE4XyBwZXJzb255ZWFycyBmb3IgYW4gZXZlbnQgaW4gMjAxOCBhZ2VfYmFuZDIwMzkNClRQWV8yMDE4XzIwMzkgPC0gc3VtKGRmXzIwMThfMjAzOSR5ZWFyc19pbl9zdHVkeV8yMDE4KQ0KDQojIENvdW50IHRoZW51bWJlciBvZiBldmVudHMgZm9yIGFnZV9iYW5kIDIwMzkgaW4gMjAxOA0KVE5FX2FuYXBoUF8yMDM5XzIwMTggPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxOF8yMDM5LCAnYW5hcGh5bF9wb3NzaWJsZScpDQpUTkVfYW5hcGhOXzIwMzlfMjAxOCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE4XzIwMzksICdhbmFwaHlsX25hcnJvdycpDQpUTkVfZ2JzXzIwMzlfMjAxOCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE4XzIwMzksICdnYnNfbmFycm93JykNCg0KI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSANCmlyb19hbmFwaFBfMjAzOV8yMDE4IDwtIElSXzk1X0NJKFRORV9hbmFwaFBfMjAzOV8yMDE4LCBUUFlfMjAxOF8yMDM5LCBucm93KGRmXzIwMThfMjAzOSkpDQppcm9fYW5hcGhOXzIwMzlfMjAxOCA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzIwMzlfMjAxOCwgVFBZXzIwMThfMjAzOSwgbnJvdyhkZl8yMDE4XzIwMzkpKQ0KaXJvX2dic18yMDM5XzIwMTggPC0gSVJfOTVfQ0koVE5FX2dic18yMDM5XzIwMTgsIFRQWV8yMDE4XzIwMzksIG5yb3coZGZfMjAxOF8yMDM5KSkNCmBgYA0KDQpgYGB7cn0NCiNFdmVudHMgaW4gMjAxOCBmb3IgYWdlIGdyb3VwIDAwLTE5DQpldmVudHNfMjAxOF80MDU5IDwtIHN1YnNldChkZl8yMDE4XzQwNTksIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAxOCkgDQojdGhlIF8yMDE4XyBwZXJzb255ZWFycyBmb3IgYW4gZXZlbnQgaW4gMjAxOCBhZ2VfYmFuZDQwNTkNClRQWV8yMDE4XzQwNTkgPC0gc3VtKGRmXzIwMThfNDA1OSR5ZWFyc19pbl9zdHVkeV8yMDE4KQ0KDQojIENvdW50IHRoZW51bWJlciBvZiBldmVudHMgZm9yIGFnZV9iYW5kIDQwNTkgaW4gMjAxOA0KVE5FX2FuYXBoUF80MDU5XzIwMTggPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxOF80MDU5LCAnYW5hcGh5bF9wb3NzaWJsZScpDQpUTkVfYW5hcGhOXzQwNTlfMjAxOCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE4XzQwNTksICdhbmFwaHlsX25hcnJvdycpDQpUTkVfZ2JzXzQwNTlfMjAxOCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE4XzQwNTksICdnYnNfbmFycm93JykNCg0KI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSANCmlyb19hbmFwaFBfNDA1OV8yMDE4IDwtIElSXzk1X0NJKFRORV9hbmFwaFBfNDA1OV8yMDE4LCBUUFlfMjAxOF80MDU5LCBucm93KGRmXzIwMThfNDA1OSkpDQppcm9fYW5hcGhOXzQwNTlfMjAxOCA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzQwNTlfMjAxOCwgVFBZXzIwMThfNDA1OSwgbnJvdyhkZl8yMDE4XzQwNTkpKQ0KaXJvX2dic180MDU5XzIwMTggPC0gSVJfOTVfQ0koVE5FX2dic180MDU5XzIwMTgsIFRQWV8yMDE4XzQwNTksIG5yb3coZGZfMjAxOF80MDU5KSkNCmBgYA0KDQpgYGB7cn0NCiNFdmVudHMgaW4gMjAxOCBmb3IgYWdlIGdyb3VwIDAwLTE5DQpldmVudHNfMjAxOF82MDc5IDwtIHN1YnNldChkZl8yMDE4XzYwNzksIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAxOCkgDQojdGhlIF8yMDE4XyBwZXJzb255ZWFycyBmb3IgYW4gZXZlbnQgaW4gMjAxOCBhZ2VfYmFuZDYwNzkNClRQWV8yMDE4XzYwNzkgPC0gc3VtKGRmXzIwMThfNjA3OSR5ZWFyc19pbl9zdHVkeV8yMDE4KQ0KDQojIENvdW50IHRoZW51bWJlciBvZiBldmVudHMgZm9yIGFnZV9iYW5kIDYwNzkgaW4gMjAxOA0KVE5FX2FuYXBoUF82MDc5XzIwMTggPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxOF82MDc5LCAnYW5hcGh5bF9wb3NzaWJsZScpDQpUTkVfYW5hcGhOXzYwNzlfMjAxOCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE4XzYwNzksICdhbmFwaHlsX25hcnJvdycpDQpUTkVfZ2JzXzYwNzlfMjAxOCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE4XzYwNzksICdnYnNfbmFycm93JykNCg0KI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSANCmlyb19hbmFwaFBfNjA3OV8yMDE4IDwtIElSXzk1X0NJKFRORV9hbmFwaFBfNjA3OV8yMDE4LCBUUFlfMjAxOF82MDc5LCBucm93KGRmXzIwMThfNjA3OSkpDQppcm9fYW5hcGhOXzYwNzlfMjAxOCA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzYwNzlfMjAxOCwgVFBZXzIwMThfNjA3OSwgbnJvdyhkZl8yMDE4XzYwNzkpKQ0KaXJvX2dic182MDc5XzIwMTggPC0gSVJfOTVfQ0koVE5FX2dic182MDc5XzIwMTgsIFRQWV8yMDE4XzYwNzksIG5yb3coZGZfMjAxOF82MDc5KSkNCmBgYA0KDQoNCg0KYGBge3J9DQpkZl8yMDE5XzAwMTkgPC0gbWFrZV95ZWFyX2FnZV9iYW5kcyhkZl8yMDE5LCAnWzAsMTldJykNCmRmXzIwMTlfMjAzOSA8LSBtYWtlX3llYXJfYWdlX2JhbmRzKGRmXzIwMTksICdbMjAsMzldJykNCmRmXzIwMTlfNDA1OSA8LSBtYWtlX3llYXJfYWdlX2JhbmRzKGRmXzIwMTksICdbNDAsNTldJykNCmRmXzIwMTlfNjA3OSA8LSBtYWtlX3llYXJfYWdlX2JhbmRzKGRmXzIwMTksICdbNjAsNzldJykNCmBgYA0KDQoNCmBgYHtyfQ0KI0V2ZW50cyBpbiAyMDE3IGZvciBhZ2UgZ3JvdXAgMDAtMTkNCmV2ZW50c18yMDE5XzAwMTkgPC0gc3Vic2V0KGRmXzIwMTlfMDAxOSwgeWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDE5KSANCiN0aGUgXzIwMTlfIHBlcnNvbnllYXJzIGZvciBhbiBldmVudCBpbiAyMDE5IGFnZV9iYW5kMDAxOQ0KVFBZXzIwMTlfMDAxOSA8LSBzdW0oZGZfMjAxOV8wMDE5JHllYXJzX2luX3N0dWR5XzIwMTkpDQoNCiMgQ291bnQgdGhlbnVtYmVyIG9mIGV2ZW50cyBmb3IgYWdlX2JhbmQgMDAxOSBpbiAyMDE5DQpUTkVfYW5hcGhQXzAwMTlfMjAxOSA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE5XzAwMTksICdhbmFwaHlsX3Bvc3NpYmxlJykNClRORV9hbmFwaE5fMDAxOV8yMDE5IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTlfMDAxOSwgJ2FuYXBoeWxfbmFycm93JykNClRORV9nYnNfMDAxOV8yMDE5IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTlfMDAxOSwgJ2dic19uYXJyb3cnKQ0KDQojSVIgZm9yIGVhY2ggZXZlbnQgaW4gMTAwMFBZIGZvciBhZ2VfYmFuZCAwLTE5IA0KaXJvX2FuYXBoUF8wMDE5XzIwMTkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoUF8wMDE5XzIwMTksIFRQWV8yMDE5XzAwMTksIG5yb3coZGZfMjAxOV8wMDE5KSkNCmlyb19hbmFwaE5fMDAxOV8yMDE5IDwtIElSXzk1X0NJKFRORV9hbmFwaE5fMDAxOV8yMDE5LCBUUFlfMjAxOV8wMDE5LCBucm93KGRmXzIwMTlfMDAxOSkpDQppcm9fZ2JzXzAwMTlfMjAxOSA8LSBJUl85NV9DSShUTkVfZ2JzXzAwMTlfMjAxOSwgVFBZXzIwMTlfMDAxOSwgbnJvdyhkZl8yMDE5XzAwMTkpKQ0KYGBgDQoNCmBgYHtyfQ0KI0V2ZW50cyBpbiAyMDE5IGZvciBhZ2UgZ3JvdXAgMDAtMTkNCmV2ZW50c18yMDE5XzIwMzkgPC0gc3Vic2V0KGRmXzIwMTlfMjAzOSwgeWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDE5KSANCiN0aGUgXzIwMTlfIHBlcnNvbnllYXJzIGZvciBhbiBldmVudCBpbiAyMDE5IGFnZV9iYW5kMjAzOQ0KVFBZXzIwMTlfMjAzOSA8LSBzdW0oZGZfMjAxOV8yMDM5JHllYXJzX2luX3N0dWR5XzIwMTkpDQoNCiMgQ291bnQgdGhlbnVtYmVyIG9mIGV2ZW50cyBmb3IgYWdlX2JhbmQgMjAzOSBpbiAyMDE5DQpUTkVfYW5hcGhQXzIwMzlfMjAxOSA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE5XzIwMzksICdhbmFwaHlsX3Bvc3NpYmxlJykNClRORV9hbmFwaE5fMjAzOV8yMDE5IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTlfMjAzOSwgJ2FuYXBoeWxfbmFycm93JykNClRORV9nYnNfMjAzOV8yMDE5IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTlfMjAzOSwgJ2dic19uYXJyb3cnKQ0KDQojSVIgZm9yIGVhY2ggZXZlbnQgaW4gMTAwMFBZIGZvciBhZ2VfYmFuZCAwLTE5IA0KaXJvX2FuYXBoUF8yMDM5XzIwMTkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoUF8yMDM5XzIwMTksIFRQWV8yMDE5XzIwMzksIG5yb3coZGZfMjAxOV8yMDM5KSkNCmlyb19hbmFwaE5fMjAzOV8yMDE5IDwtIElSXzk1X0NJKFRORV9hbmFwaE5fMjAzOV8yMDE5LCBUUFlfMjAxOV8yMDM5LCBucm93KGRmXzIwMTlfMjAzOSkpDQppcm9fZ2JzXzIwMzlfMjAxOSA8LSBJUl85NV9DSShUTkVfZ2JzXzIwMzlfMjAxOSwgVFBZXzIwMTlfMjAzOSwgbnJvdyhkZl8yMDE5XzIwMzkpKQ0KYGBgDQoNCmBgYHtyfQ0KI0V2ZW50cyBpbiAyMDE5IGZvciBhZ2UgZ3JvdXAgMDAtMTkNCmV2ZW50c18yMDE5XzQwNTkgPC0gc3Vic2V0KGRmXzIwMTlfNDA1OSwgeWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDE5KSANCiN0aGUgXzIwMTlfIHBlcnNvbnllYXJzIGZvciBhbiBldmVudCBpbiAyMDE5IGFnZV9iYW5kNDA1OQ0KVFBZXzIwMTlfNDA1OSA8LSBzdW0oZGZfMjAxOV80MDU5JHllYXJzX2luX3N0dWR5XzIwMTkpDQoNCiMgQ291bnQgdGhlbnVtYmVyIG9mIGV2ZW50cyBmb3IgYWdlX2JhbmQgNDA1OSBpbiAyMDE5DQpUTkVfYW5hcGhQXzQwNTlfMjAxOSA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE5XzQwNTksICdhbmFwaHlsX3Bvc3NpYmxlJykNClRORV9hbmFwaE5fNDA1OV8yMDE5IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTlfNDA1OSwgJ2FuYXBoeWxfbmFycm93JykNClRORV9nYnNfNDA1OV8yMDE5IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTlfNDA1OSwgJ2dic19uYXJyb3cnKQ0KDQojSVIgZm9yIGVhY2ggZXZlbnQgaW4gMTAwMFBZIGZvciBhZ2VfYmFuZCAwLTE5IA0KaXJvX2FuYXBoUF80MDU5XzIwMTkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoUF80MDU5XzIwMTksIFRQWV8yMDE5XzQwNTksIG5yb3coZGZfMjAxOV80MDU5KSkNCmlyb19hbmFwaE5fNDA1OV8yMDE5IDwtIElSXzk1X0NJKFRORV9hbmFwaE5fNDA1OV8yMDE5LCBUUFlfMjAxOV80MDU5LCBucm93KGRmXzIwMTlfNDA1OSkpDQppcm9fZ2JzXzQwNTlfMjAxOSA8LSBJUl85NV9DSShUTkVfZ2JzXzQwNTlfMjAxOSwgVFBZXzIwMTlfNDA1OSwgbnJvdyhkZl8yMDE5XzQwNTkpKQ0KYGBgDQoNCmBgYHtyfQ0KI0V2ZW50cyBpbiAyMDE5IGZvciBhZ2UgZ3JvdXAgMDAtMTkNCmV2ZW50c18yMDE5XzYwNzkgPC0gc3Vic2V0KGRmXzIwMTlfNjA3OSwgeWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDE5KSANCiN0aGUgXzIwMTlfIHBlcnNvbnllYXJzIGZvciBhbiBldmVudCBpbiAyMDE5IGFnZV9iYW5kNjA3OQ0KVFBZXzIwMTlfNjA3OSA8LSBzdW0oZGZfMjAxOV82MDc5JHllYXJzX2luX3N0dWR5XzIwMTkpDQoNCiMgQ291bnQgdGhlbnVtYmVyIG9mIGV2ZW50cyBmb3IgYWdlX2JhbmQgNjA3OSBpbiAyMDE5DQpUTkVfYW5hcGhQXzYwNzlfMjAxOSA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE5XzYwNzksICdhbmFwaHlsX3Bvc3NpYmxlJykNClRORV9hbmFwaE5fNjA3OV8yMDE5IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTlfNjA3OSwgJ2FuYXBoeWxfbmFycm93JykNClRORV9nYnNfNjA3OV8yMDE5IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTlfNjA3OSwgJ2dic19uYXJyb3cnKQ0KDQojSVIgZm9yIGVhY2ggZXZlbnQgaW4gMTAwMFBZIGZvciBhZ2VfYmFuZCAwLTE5IA0KaXJvX2FuYXBoUF82MDc5XzIwMTkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoUF82MDc5XzIwMTksIFRQWV8yMDE5XzYwNzksIG5yb3coZGZfMjAxOV82MDc5KSkNCmlyb19hbmFwaE5fNjA3OV8yMDE5IDwtIElSXzk1X0NJKFRORV9hbmFwaE5fNjA3OV8yMDE5LCBUUFlfMjAxOV82MDc5LCBucm93KGRmXzIwMTlfNjA3OSkpDQppcm9fZ2JzXzYwNzlfMjAxOSA8LSBJUl85NV9DSShUTkVfZ2JzXzYwNzlfMjAxOSwgVFBZXzIwMTlfNjA3OSwgbnJvdyhkZl8yMDE5XzYwNzkpKQ0KYGBgDQoNCg0KDQpgYGB7cn0NCmRmXzIwMjBfMDAxOSA8LSBtYWtlX3llYXJfYWdlX2JhbmRzKGRmXzIwMjAsICdbMCwxOV0nKQ0KZGZfMjAyMF8yMDM5IDwtIG1ha2VfeWVhcl9hZ2VfYmFuZHMoZGZfMjAyMCwgJ1syMCwzOV0nKQ0KZGZfMjAyMF80MDU5IDwtIG1ha2VfeWVhcl9hZ2VfYmFuZHMoZGZfMjAyMCwgJ1s0MCw1OV0nKQ0KZGZfMjAyMF82MDc5IDwtIG1ha2VfeWVhcl9hZ2VfYmFuZHMoZGZfMjAyMCwgJ1s2MCw3OV0nKQ0KYGBgDQoNCg0KYGBge3J9DQojRXZlbnRzIGluIDIwMTcgZm9yIGFnZSBncm91cCAwMC0xOQ0KZXZlbnRzXzIwMjBfMDAxOSA8LSBzdWJzZXQoZGZfMjAyMF8wMDE5LCB5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMjApIA0KI3RoZSBfMjAyMF8gcGVyc29ueWVhcnMgZm9yIGFuIGV2ZW50IGluIDIwMjAgYWdlX2JhbmQwMDE5DQpUUFlfMjAyMF8wMDE5IDwtIHN1bShkZl8yMDIwXzAwMTkkeWVhcnNfaW5fc3R1ZHlfMjAyMCkNCg0KIyBDb3VudCB0aGVudW1iZXIgb2YgZXZlbnRzIGZvciBhZ2VfYmFuZCAwMDE5IGluIDIwMjANClRORV9hbmFwaFBfMDAxOV8yMDIwIDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMjBfMDAxOSwgJ2FuYXBoeWxfcG9zc2libGUnKQ0KVE5FX2FuYXBoTl8wMDE5XzIwMjAgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAyMF8wMDE5LCAnYW5hcGh5bF9uYXJyb3cnKQ0KVE5FX2dic18wMDE5XzIwMjAgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAyMF8wMDE5LCAnZ2JzX25hcnJvdycpDQoNCiNJUiBmb3IgZWFjaCBldmVudCBpbiAxMDAwUFkgZm9yIGFnZV9iYW5kIDAtMTkgDQppcm9fYW5hcGhQXzAwMTlfMjAyMCA8LSBJUl85NV9DSShUTkVfYW5hcGhQXzAwMTlfMjAyMCwgVFBZXzIwMjBfMDAxOSwgbnJvdyhkZl8yMDIwXzAwMTkpKQ0KaXJvX2FuYXBoTl8wMDE5XzIwMjAgPC0gSVJfOTVfQ0koVE5FX2FuYXBoTl8wMDE5XzIwMjAsIFRQWV8yMDIwXzAwMTksIG5yb3coZGZfMjAyMF8wMDE5KSkNCmlyb19nYnNfMDAxOV8yMDIwIDwtIElSXzk1X0NJKFRORV9nYnNfMDAxOV8yMDIwLCBUUFlfMjAyMF8wMDE5LCBucm93KGRmXzIwMjBfMDAxOSkpDQpgYGANCg0KYGBge3J9DQojRXZlbnRzIGluIDIwMjAgZm9yIGFnZSBncm91cCAwMC0xOQ0KZXZlbnRzXzIwMjBfMjAzOSA8LSBzdWJzZXQoZGZfMjAyMF8yMDM5LCB5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMjApIA0KI3RoZSBfMjAyMF8gcGVyc29ueWVhcnMgZm9yIGFuIGV2ZW50IGluIDIwMjAgYWdlX2JhbmQyMDM5DQpUUFlfMjAyMF8yMDM5IDwtIHN1bShkZl8yMDIwXzIwMzkkeWVhcnNfaW5fc3R1ZHlfMjAyMCkNCg0KIyBDb3VudCB0aGVudW1iZXIgb2YgZXZlbnRzIGZvciBhZ2VfYmFuZCAyMDM5IGluIDIwMjANClRORV9hbmFwaFBfMjAzOV8yMDIwIDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMjBfMjAzOSwgJ2FuYXBoeWxfcG9zc2libGUnKQ0KVE5FX2FuYXBoTl8yMDM5XzIwMjAgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAyMF8yMDM5LCAnYW5hcGh5bF9uYXJyb3cnKQ0KVE5FX2dic18yMDM5XzIwMjAgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAyMF8yMDM5LCAnZ2JzX25hcnJvdycpDQoNCiNJUiBmb3IgZWFjaCBldmVudCBpbiAxMDAwUFkgZm9yIGFnZV9iYW5kIDAtMTkgDQppcm9fYW5hcGhQXzIwMzlfMjAyMCA8LSBJUl85NV9DSShUTkVfYW5hcGhQXzIwMzlfMjAyMCwgVFBZXzIwMjBfMjAzOSwgbnJvdyhkZl8yMDIwXzIwMzkpKQ0KaXJvX2FuYXBoTl8yMDM5XzIwMjAgPC0gSVJfOTVfQ0koVE5FX2FuYXBoTl8yMDM5XzIwMjAsIFRQWV8yMDIwXzIwMzksIG5yb3coZGZfMjAyMF8yMDM5KSkNCmlyb19nYnNfMjAzOV8yMDIwIDwtIElSXzk1X0NJKFRORV9nYnNfMjAzOV8yMDIwLCBUUFlfMjAyMF8yMDM5LCBucm93KGRmXzIwMjBfMjAzOSkpDQpgYGANCg0KYGBge3J9DQojRXZlbnRzIGluIDIwMjAgZm9yIGFnZSBncm91cCAwMC0xOQ0KZXZlbnRzXzIwMjBfNDA1OSA8LSBzdWJzZXQoZGZfMjAyMF80MDU5LCB5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMjApIA0KI3RoZSBfMjAyMF8gcGVyc29ueWVhcnMgZm9yIGFuIGV2ZW50IGluIDIwMjAgYWdlX2JhbmQ0MDU5DQpUUFlfMjAyMF80MDU5IDwtIHN1bShkZl8yMDIwXzQwNTkkeWVhcnNfaW5fc3R1ZHlfMjAyMCkNCg0KIyBDb3VudCB0aGVudW1iZXIgb2YgZXZlbnRzIGZvciBhZ2VfYmFuZCA0MDU5IGluIDIwMjANClRORV9hbmFwaFBfNDA1OV8yMDIwIDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMjBfNDA1OSwgJ2FuYXBoeWxfcG9zc2libGUnKQ0KVE5FX2FuYXBoTl80MDU5XzIwMjAgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAyMF80MDU5LCAnYW5hcGh5bF9uYXJyb3cnKQ0KVE5FX2dic180MDU5XzIwMjAgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAyMF80MDU5LCAnZ2JzX25hcnJvdycpDQoNCiNJUiBmb3IgZWFjaCBldmVudCBpbiAxMDAwUFkgZm9yIGFnZV9iYW5kIDAtMTkgDQppcm9fYW5hcGhQXzQwNTlfMjAyMCA8LSBJUl85NV9DSShUTkVfYW5hcGhQXzQwNTlfMjAyMCwgVFBZXzIwMjBfNDA1OSwgbnJvdyhkZl8yMDIwXzQwNTkpKQ0KaXJvX2FuYXBoTl80MDU5XzIwMjAgPC0gSVJfOTVfQ0koVE5FX2FuYXBoTl80MDU5XzIwMjAsIFRQWV8yMDIwXzQwNTksIG5yb3coZGZfMjAyMF80MDU5KSkNCmlyb19nYnNfNDA1OV8yMDIwIDwtIElSXzk1X0NJKFRORV9nYnNfNDA1OV8yMDIwLCBUUFlfMjAyMF80MDU5LCBucm93KGRmXzIwMjBfNDA1OSkpDQpgYGANCg0KYGBge3J9DQojRXZlbnRzIGluIDIwMjAgZm9yIGFnZSBncm91cCAwMC0xOQ0KZXZlbnRzXzIwMjBfNjA3OSA8LSBzdWJzZXQoZGZfMjAyMF82MDc5LCB5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMjApIA0KI3RoZSBfMjAyMF8gcGVyc29ueWVhcnMgZm9yIGFuIGV2ZW50IGluIDIwMjAgYWdlX2JhbmQ2MDc5DQpUUFlfMjAyMF82MDc5IDwtIHN1bShkZl8yMDIwXzYwNzkkeWVhcnNfaW5fc3R1ZHlfMjAyMCkNCg0KIyBDb3VudCB0aGVudW1iZXIgb2YgZXZlbnRzIGZvciBhZ2VfYmFuZCA2MDc5IGluIDIwMjANClRORV9hbmFwaFBfNjA3OV8yMDIwIDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMjBfNjA3OSwgJ2FuYXBoeWxfcG9zc2libGUnKQ0KVE5FX2FuYXBoTl82MDc5XzIwMjAgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAyMF82MDc5LCAnYW5hcGh5bF9uYXJyb3cnKQ0KVE5FX2dic182MDc5XzIwMjAgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAyMF82MDc5LCAnZ2JzX25hcnJvdycpDQoNCiNJUiBmb3IgZWFjaCBldmVudCBpbiAxMDAwUFkgZm9yIGFnZV9iYW5kIDAtMTkgDQppcm9fYW5hcGhQXzYwNzlfMjAyMCA8LSBJUl85NV9DSShUTkVfYW5hcGhQXzYwNzlfMjAyMCwgVFBZXzIwMjBfNjA3OSwgbnJvdyhkZl8yMDIwXzYwNzkpKQ0KaXJvX2FuYXBoTl82MDc5XzIwMjAgPC0gSVJfOTVfQ0koVE5FX2FuYXBoTl82MDc5XzIwMjAsIFRQWV8yMDIwXzYwNzksIG5yb3coZGZfMjAyMF82MDc5KSkNCmlyb19nYnNfNjA3OV8yMDIwIDwtIElSXzk1X0NJKFRORV9nYnNfNjA3OV8yMDIwLCBUUFlfMjAyMF82MDc5LCBucm93KGRmXzIwMjBfNjA3OSkpDQpgYGANCg0KDQoNCmBgYHtyfQ0KRGlhZzEgPC0gcmVwKCdBbmFwaHlsYXhpcyBuYXJyb3cnLCB0aW1lcz0yNSkNCkRpYWcyIDwtIHJlcCgnQW5hcGh5bGF4aXMgcG9zc2libGUnLCB0aW1lcz0yNSkNCkRpYWczIDwtIHJlcCgnZ2JzIG5hcnJvdycsIHRpbWVzPTI1KQ0KYWxsX2RpYWcgPC0gYyhEaWFnMSwgRGlhZzIsIERpYWczKQ0KDQphbGxfeWVhcnMgPC0gcmVwKGMoJ1RvdGFsJywgJzIwMTcnLCAnMjAxOCcsICcyMDE5JywgJzIwMjAnKSwgdGltZXM9MTUpDQoNCnJlcF90b3RhbCA8LSByZXAoJ1RvdGFsJywgdGltZXM9NSkNCnJlcF8wMDE5IDwtIHJlcCgnMC0xOScsIHRpbWVzPTUpDQpyZXBfMjAzOSA8LSByZXAoJzIwLTM5JywgdGltZXM9NSkNCnJlcF80MDU5IDwtIHJlcCgnNDAtNTknLCB0aW1lcz01KQ0KcmVwXzYwNzkgPC0gcmVwKCc2MC03OScsIHRpbWVzPTUpDQoNCmFsbF9hZ2VzIDwtIHJlcChjKHJlcF90b3RhbCwgcmVwXzAwMTksIHJlcF8yMDM5LCByZXBfNDA1OSwgcmVwXzYwNzkpLCB0aW1lcz0zKQ0KDQoNCg0KY291bnRfZXZlbnRzIDwtIGMoDQogIFRORV9hbmFwaE4sIFRORV9hbmFwaE5fMjAxNywgVE5FX2FuYXBoTl8yMDE4LCANCiAgVE5FX2FuYXBoTl8yMDE5LCBUTkVfYW5hcGhOXzIwMjAsIA0KICBUTkVfYW5hcGhOMDAxOSwgVE5FX2FuYXBoTl8wMDE5XzIwMTcsIFRORV9hbmFwaE5fMDAxOV8yMDE4LA0KICBUTkVfYW5hcGhOXzAwMTlfMjAxOSwgVE5FX2FuYXBoTl8wMDE5XzIwMjAsIA0KICBUTkVfYW5hcGhOMjAzOSwgVE5FX2FuYXBoTl8yMDM5XzIwMTcsIFRORV9hbmFwaE5fMjAzOV8yMDE4LA0KICBUTkVfYW5hcGhOXzIwMzlfMjAxOSwgVE5FX2FuYXBoTl8yMDM5XzIwMjAsDQogIFRORV9hbmFwaE40MDU5LCBUTkVfYW5hcGhOXzQwNTlfMjAxNywgVE5FX2FuYXBoTl80MDU5XzIwMTgsDQogIFRORV9hbmFwaE5fNDA1OV8yMDE5LCBUTkVfYW5hcGhOXzQwNTlfMjAyMCwNCiAgVE5FX2FuYXBoTjYwNzksIFRORV9hbmFwaE5fNjA3OV8yMDE3LCBUTkVfYW5hcGhOXzYwNzlfMjAxOCwNCiAgVE5FX2FuYXBoTl82MDc5XzIwMTksIFRORV9hbmFwaE5fNjA3OV8yMDIwLA0KICAjIyMjIEFuYXBoIFBvc3NpYmxlIA0KICBUTkVfYW5hcGhQLCBUTkVfYW5hcGhQXzIwMTcsIFRORV9hbmFwaFBfMjAxOCwgDQogIFRORV9hbmFwaFBfMjAxOSwgVE5FX2FuYXBoUF8yMDIwLCANCiAgVE5FX2FuYXBoUDAwMTksIFRORV9hbmFwaFBfMDAxOV8yMDE3LCBUTkVfYW5hcGhQXzAwMTlfMjAxOCwNCiAgVE5FX2FuYXBoUF8wMDE5XzIwMTksIFRORV9hbmFwaFBfMDAxOV8yMDIwLCANCiAgVE5FX2FuYXBoUDIwMzksIFRORV9hbmFwaFBfMjAzOV8yMDE3LCBUTkVfYW5hcGhQXzIwMzlfMjAxOCwNCiAgVE5FX2FuYXBoUF8yMDM5XzIwMTksIFRORV9hbmFwaFBfMjAzOV8yMDIwLA0KICBUTkVfYW5hcGhQNDA1OSwgVE5FX2FuYXBoUF80MDU5XzIwMTcsIFRORV9hbmFwaFBfNDA1OV8yMDE4LA0KICBUTkVfYW5hcGhQXzQwNTlfMjAxOSwgVE5FX2FuYXBoUF80MDU5XzIwMjAsDQogIFRORV9hbmFwaFA2MDc5LCBUTkVfYW5hcGhQXzYwNzlfMjAxNywgVE5FX2FuYXBoUF82MDc5XzIwMTgsDQogIFRORV9hbmFwaFBfNjA3OV8yMDE5LCBUTkVfYW5hcGhQXzYwNzlfMjAyMCwNCiAgIyMjIyBHQlMgDQogIFRORV9nYnMsIFRORV9nYnNfMjAxNywgVE5FX2dic18yMDE4LCANCiAgVE5FX2dic18yMDE5LCBUTkVfZ2JzXzIwMjAsIA0KICBUTkVfZ2JzMDAxOSwgVE5FX2dic18wMDE5XzIwMTcsIFRORV9nYnNfMDAxOV8yMDE4LA0KICBUTkVfZ2JzXzAwMTlfMjAxOSwgVE5FX2dic18wMDE5XzIwMjAsIA0KICBUTkVfZ2JzMjAzOSwgVE5FX2dic18yMDM5XzIwMTcsIFRORV9nYnNfMjAzOV8yMDE4LA0KICBUTkVfZ2JzXzIwMzlfMjAxOSwgVE5FX2dic18yMDM5XzIwMjAsDQogIFRORV9nYnM0MDU5LCBUTkVfZ2JzXzQwNTlfMjAxNywgVE5FX2dic180MDU5XzIwMTgsDQogIFRORV9nYnNfNDA1OV8yMDE5LCBUTkVfZ2JzXzQwNTlfMjAyMCwNCiAgVE5FX2diczYwNzksIFRORV9nYnNfNjA3OV8yMDE3LCBUTkVfZ2JzXzYwNzlfMjAxOCwNCiAgVE5FX2dic182MDc5XzIwMTksIFRORV9nYnNfNjA3OV8yMDIwDQogICkNCg0KDQpQZXJzWWVhciA8LSBjKFRQWSwgVFBZXzIwMTcsIFRQWV8yMDE4LCANCiAgVFBZXzIwMTksIFRQWV8yMDIwLCANCiAgVFBZMDAxOSwgVFBZXzIwMTdfMDAxOSwgVFBZXzIwMThfMDAxOSwNCiAgVFBZXzIwMTlfMDAxOSwgVFBZXzIwMjBfMDAxOSwgDQogIFRQWTIwMzksIFRQWV8yMDE3XzIwMzksIFRQWV8yMDE4XzIwMzksDQogIFRQWV8yMDE5XzIwMzksIFRQWV8yMDIwXzIwMzksDQogIFRQWTQwNTksIFRQWV8yMDE3XzQwNTksIFRQWV8yMDE4XzQwNTksDQogIFRQWV8yMDE5XzQwNTksIFRQWV8yMDIwXzQwNTksDQogIFRQWTYwNzksIFRQWV8yMDE3XzQwNTksIFRQWV8yMDE4XzQwNTksDQogIFRQWV8yMDE5XzQwNTksIFRQWV8yMDIwXzQwNTkpDQoNCg0KcGVyc195ZWFyX2FsbCA8LSByZXAoUGVyc1llYXIsIHRpbWVzPTMpDQoNCmBgYA0KDQpgYGB7cn0NCklSXzEwMDBQWSA8LSAgYXMubnVtZXJpYyhjKA0KICBpcm9fYW5hcGhOWzFdLCBpcm9fYW5hcGhOXzIwMTdbMV0sIGlyb19hbmFwaE5fMjAxOFsxXSwgDQogIGlyb19hbmFwaE5fMjAxOVsxXSwgaXJvX2FuYXBoTl8yMDIwWzFdLCANCiAgaXJvX2FuYXBoTjAwMTlbMV0sIGlyb19hbmFwaE5fMDAxOV8yMDE3WzFdLCBpcm9fYW5hcGhOXzAwMTlfMjAxOFsxXSwNCiAgaXJvX2FuYXBoTl8wMDE5XzIwMTlbMV0sIGlyb19hbmFwaE5fMDAxOV8yMDIwWzFdLCANCiAgaXJvX2FuYXBoTjIwMzlbMV0sIGlyb19hbmFwaE5fMjAzOV8yMDE3WzFdLCBpcm9fYW5hcGhOXzIwMzlfMjAxOFsxXSwNCiAgaXJvX2FuYXBoTl8yMDM5XzIwMTlbMV0sIGlyb19hbmFwaE5fMjAzOV8yMDIwWzFdLA0KICBpcm9fYW5hcGhONDA1OVsxXSwgaXJvX2FuYXBoTl80MDU5XzIwMTdbMV0sIGlyb19hbmFwaE5fNDA1OV8yMDE4WzFdLA0KICBpcm9fYW5hcGhOXzQwNTlfMjAxOVsxXSwgaXJvX2FuYXBoTl80MDU5XzIwMjBbMV0sDQogIGlyb19hbmFwaE42MDc5WzFdLCBpcm9fYW5hcGhOXzYwNzlfMjAxN1sxXSwgaXJvX2FuYXBoTl82MDc5XzIwMThbMV0sDQogIGlyb19hbmFwaE5fNjA3OV8yMDE5WzFdLCBpcm9fYW5hcGhOXzYwNzlfMjAyMFsxXSwNCiAgIyMjIyBBbmFwaCBQb3NzaWJsZSANCiAgaXJvX2FuYXBoUFsxXSwgaXJvX2FuYXBoUF8yMDE3WzFdLCBpcm9fYW5hcGhQXzIwMThbMV0sIA0KICBpcm9fYW5hcGhQXzIwMTlbMV0sIGlyb19hbmFwaFBfMjAyMFsxXSwgDQogIGlyb19hbmFwaFAwMDE5WzFdLCBpcm9fYW5hcGhQXzAwMTlfMjAxN1sxXSwgaXJvX2FuYXBoUF8wMDE5XzIwMThbMV0sDQogIGlyb19hbmFwaFBfMDAxOV8yMDE5WzFdLCBpcm9fYW5hcGhQXzAwMTlfMjAyMFsxXSwgDQogIGlyb19hbmFwaFAyMDM5WzFdLCBpcm9fYW5hcGhQXzIwMzlfMjAxN1sxXSwgaXJvX2FuYXBoUF8yMDM5XzIwMThbMV0sDQogIGlyb19hbmFwaFBfMjAzOV8yMDE5WzFdLCBpcm9fYW5hcGhQXzIwMzlfMjAyMFsxXSwNCiAgaXJvX2FuYXBoUDQwNTlbMV0sIGlyb19hbmFwaFBfNDA1OV8yMDE3WzFdLCBpcm9fYW5hcGhQXzQwNTlfMjAxOFsxXSwNCiAgaXJvX2FuYXBoUF80MDU5XzIwMTlbMV0sIGlyb19hbmFwaFBfNDA1OV8yMDIwWzFdLA0KICBpcm9fYW5hcGhQNjA3OVsxXSwgaXJvX2FuYXBoUF82MDc5XzIwMTdbMV0sIGlyb19hbmFwaFBfNjA3OV8yMDE4WzFdLA0KICBpcm9fYW5hcGhQXzYwNzlfMjAxOVsxXSwgaXJvX2FuYXBoUF82MDc5XzIwMjBbMV0sDQogICMjIyMgR0JTIA0KICAgIGlyb19nYnNbMV0sIGlyb19nYnNfMjAxN1sxXSwgaXJvX2dic18yMDE4WzFdLCANCiAgaXJvX2dic18yMDE5WzFdLCBpcm9fZ2JzXzIwMjBbMV0sIA0KICBpcm9fZ2JzMDAxOVsxXSwgaXJvX2dic18wMDE5XzIwMTdbMV0sIGlyb19nYnNfMDAxOV8yMDE4WzFdLA0KICBpcm9fZ2JzXzAwMTlfMjAxOVsxXSwgaXJvX2dic18wMDE5XzIwMjBbMV0sIA0KICBpcm9fZ2JzMjAzOVsxXSwgaXJvX2dic18yMDM5XzIwMTdbMV0sIGlyb19nYnNfMjAzOV8yMDE4WzFdLA0KICBpcm9fZ2JzXzIwMzlfMjAxOVsxXSwgaXJvX2dic18yMDM5XzIwMjBbMV0sDQogIGlyb19nYnM0MDU5WzFdLCBpcm9fZ2JzXzQwNTlfMjAxN1sxXSwgaXJvX2dic180MDU5XzIwMThbMV0sDQogIGlyb19nYnNfNDA1OV8yMDE5WzFdLCBpcm9fZ2JzXzQwNTlfMjAyMFsxXSwNCiAgaXJvX2diczYwNzlbMV0sIGlyb19nYnNfNjA3OV8yMDE3WzFdLCBpcm9fZ2JzXzYwNzlfMjAxOFsxXSwNCiAgaXJvX2dic182MDc5XzIwMTlbMV0sIGlyb19nYnNfNjA3OV8yMDIwWzFdDQogICkpDQpgYGANCg0KYGBge3J9DQpJUl8xMDAwUFlfOTVMIDwtIGFzLm51bWVyaWMoYygNCiAgaXJvX2FuYXBoTlsyXSwgaXJvX2FuYXBoTl8yMDE3WzJdLCBpcm9fYW5hcGhOXzIwMThbMl0sIA0KICBpcm9fYW5hcGhOXzIwMTlbMl0sIGlyb19hbmFwaE5fMjAyMFsyXSwgDQogIGlyb19hbmFwaE4wMDE5WzJdLCBpcm9fYW5hcGhOXzAwMTlfMjAxN1syXSwgaXJvX2FuYXBoTl8wMDE5XzIwMThbMl0sDQogIGlyb19hbmFwaE5fMDAxOV8yMDE5WzJdLCBpcm9fYW5hcGhOXzAwMTlfMjAyMFsyXSwgDQogIGlyb19hbmFwaE4yMDM5WzJdLCBpcm9fYW5hcGhOXzIwMzlfMjAxN1syXSwgaXJvX2FuYXBoTl8yMDM5XzIwMThbMl0sDQogIGlyb19hbmFwaE5fMjAzOV8yMDE5WzJdLCBpcm9fYW5hcGhOXzIwMzlfMjAyMFsyXSwNCiAgaXJvX2FuYXBoTjQwNTlbMl0sIGlyb19hbmFwaE5fNDA1OV8yMDE3WzJdLCBpcm9fYW5hcGhOXzQwNTlfMjAxOFsyXSwNCiAgaXJvX2FuYXBoTl80MDU5XzIwMTlbMl0sIGlyb19hbmFwaE5fNDA1OV8yMDIwWzJdLA0KICBpcm9fYW5hcGhONjA3OVsyXSwgaXJvX2FuYXBoTl82MDc5XzIwMTdbMl0sIGlyb19hbmFwaE5fNjA3OV8yMDE4WzJdLA0KICBpcm9fYW5hcGhOXzYwNzlfMjAxOVsyXSwgaXJvX2FuYXBoTl82MDc5XzIwMjBbMl0sDQogICMjIyMgQW5hcGggUG9zc2libGUgDQogIGlyb19hbmFwaFBbMl0sIGlyb19hbmFwaFBfMjAxN1syXSwgaXJvX2FuYXBoUF8yMDE4WzJdLCANCiAgaXJvX2FuYXBoUF8yMDE5WzJdLCBpcm9fYW5hcGhQXzIwMjBbMl0sIA0KICBpcm9fYW5hcGhQMDAxOVsyXSwgaXJvX2FuYXBoUF8wMDE5XzIwMTdbMl0sIGlyb19hbmFwaFBfMDAxOV8yMDE4WzJdLA0KICBpcm9fYW5hcGhQXzAwMTlfMjAxOVsyXSwgaXJvX2FuYXBoUF8wMDE5XzIwMjBbMl0sIA0KICBpcm9fYW5hcGhQMjAzOVsyXSwgaXJvX2FuYXBoUF8yMDM5XzIwMTdbMl0sIGlyb19hbmFwaFBfMjAzOV8yMDE4WzJdLA0KICBpcm9fYW5hcGhQXzIwMzlfMjAxOVsyXSwgaXJvX2FuYXBoUF8yMDM5XzIwMjBbMl0sDQogIGlyb19hbmFwaFA0MDU5WzJdLCBpcm9fYW5hcGhQXzQwNTlfMjAxN1syXSwgaXJvX2FuYXBoUF80MDU5XzIwMThbMl0sDQogIGlyb19hbmFwaFBfNDA1OV8yMDE5WzJdLCBpcm9fYW5hcGhQXzQwNTlfMjAyMFsyXSwNCiAgaXJvX2FuYXBoUDYwNzlbMl0sIGlyb19hbmFwaFBfNjA3OV8yMDE3WzJdLCBpcm9fYW5hcGhQXzYwNzlfMjAxOFsyXSwNCiAgaXJvX2FuYXBoUF82MDc5XzIwMTlbMl0sIGlyb19hbmFwaFBfNjA3OV8yMDIwWzJdLA0KICAjIyMjIEdCUyANCiAgICBpcm9fZ2JzWzJdLCBpcm9fZ2JzXzIwMTdbMl0sIGlyb19nYnNfMjAxOFsyXSwgDQogIGlyb19nYnNfMjAxOVsyXSwgaXJvX2dic18yMDIwWzJdLCANCiAgaXJvX2diczAwMTlbMl0sIGlyb19nYnNfMDAxOV8yMDE3WzJdLCBpcm9fZ2JzXzAwMTlfMjAxOFsyXSwNCiAgaXJvX2dic18wMDE5XzIwMTlbMl0sIGlyb19nYnNfMDAxOV8yMDIwWzJdLCANCiAgaXJvX2diczIwMzlbMl0sIGlyb19nYnNfMjAzOV8yMDE3WzJdLCBpcm9fZ2JzXzIwMzlfMjAxOFsyXSwNCiAgaXJvX2dic18yMDM5XzIwMTlbMl0sIGlyb19nYnNfMjAzOV8yMDIwWzJdLA0KICBpcm9fZ2JzNDA1OVsyXSwgaXJvX2dic180MDU5XzIwMTdbMl0sIGlyb19nYnNfNDA1OV8yMDE4WzJdLA0KICBpcm9fZ2JzXzQwNTlfMjAxOVsyXSwgaXJvX2dic180MDU5XzIwMjBbMl0sDQogIGlyb19nYnM2MDc5WzJdLCBpcm9fZ2JzXzYwNzlfMjAxN1syXSwgaXJvX2dic182MDc5XzIwMThbMl0sDQogIGlyb19nYnNfNjA3OV8yMDE5WzJdLCBpcm9fZ2JzXzYwNzlfMjAyMFsyXQ0KICApKQ0KYGBgDQoNCg0KYGBge3J9DQpJUl8xMDAwUFlfOTVIIDwtIGFzLm51bWVyaWMoYygNCiAgaXJvX2FuYXBoTlszXSwgaXJvX2FuYXBoTl8yMDE3WzNdLCBpcm9fYW5hcGhOXzIwMThbM10sIA0KICBpcm9fYW5hcGhOXzIwMTlbM10sIGlyb19hbmFwaE5fMjAyMFszXSwgDQogIGlyb19hbmFwaE4wMDE5WzNdLCBpcm9fYW5hcGhOXzAwMTlfMjAxN1szXSwgaXJvX2FuYXBoTl8wMDE5XzIwMThbM10sDQogIGlyb19hbmFwaE5fMDAxOV8yMDE5WzNdLCBpcm9fYW5hcGhOXzAwMTlfMjAyMFszXSwgDQogIGlyb19hbmFwaE4yMDM5WzNdLCBpcm9fYW5hcGhOXzIwMzlfMjAxN1szXSwgaXJvX2FuYXBoTl8yMDM5XzIwMThbM10sDQogIGlyb19hbmFwaE5fMjAzOV8yMDE5WzNdLCBpcm9fYW5hcGhOXzIwMzlfMjAyMFszXSwNCiAgaXJvX2FuYXBoTjQwNTlbM10sIGlyb19hbmFwaE5fNDA1OV8yMDE3WzNdLCBpcm9fYW5hcGhOXzQwNTlfMjAxOFszXSwNCiAgaXJvX2FuYXBoTl80MDU5XzIwMTlbM10sIGlyb19hbmFwaE5fNDA1OV8yMDIwWzNdLA0KICBpcm9fYW5hcGhONjA3OVszXSwgaXJvX2FuYXBoTl82MDc5XzIwMTdbM10sIGlyb19hbmFwaE5fNjA3OV8yMDE4WzNdLA0KICBpcm9fYW5hcGhOXzYwNzlfMjAxOVszXSwgaXJvX2FuYXBoTl82MDc5XzIwMjBbM10sDQogICMjIyMgQW5hcGggUG9zc2libGUgDQogIGlyb19hbmFwaFBbM10sIGlyb19hbmFwaFBfMjAxN1szXSwgaXJvX2FuYXBoUF8yMDE4WzNdLCANCiAgaXJvX2FuYXBoUF8yMDE5WzNdLCBpcm9fYW5hcGhQXzIwMjBbM10sIA0KICBpcm9fYW5hcGhQMDAxOVszXSwgaXJvX2FuYXBoUF8wMDE5XzIwMTdbM10sIGlyb19hbmFwaFBfMDAxOV8yMDE4WzNdLA0KICBpcm9fYW5hcGhQXzAwMTlfMjAxOVszXSwgaXJvX2FuYXBoUF8wMDE5XzIwMjBbM10sIA0KICBpcm9fYW5hcGhQMjAzOVszXSwgaXJvX2FuYXBoUF8yMDM5XzIwMTdbM10sIGlyb19hbmFwaFBfMjAzOV8yMDE4WzNdLA0KICBpcm9fYW5hcGhQXzIwMzlfMjAxOVszXSwgaXJvX2FuYXBoUF8yMDM5XzIwMjBbM10sDQogIGlyb19hbmFwaFA0MDU5WzNdLCBpcm9fYW5hcGhQXzQwNTlfMjAxN1szXSwgaXJvX2FuYXBoUF80MDU5XzIwMThbM10sDQogIGlyb19hbmFwaFBfNDA1OV8yMDE5WzNdLCBpcm9fYW5hcGhQXzQwNTlfMjAyMFszXSwNCiAgaXJvX2FuYXBoUDYwNzlbM10sIGlyb19hbmFwaFBfNjA3OV8yMDE3WzNdLCBpcm9fYW5hcGhQXzYwNzlfMjAxOFszXSwNCiAgaXJvX2FuYXBoUF82MDc5XzIwMTlbM10sIGlyb19hbmFwaFBfNjA3OV8yMDIwWzNdLA0KICAjIyMjIEdCUyANCiAgICBpcm9fZ2JzWzNdLCBpcm9fZ2JzXzIwMTdbM10sIGlyb19nYnNfMjAxOFszXSwgDQogIGlyb19nYnNfMjAxOVszXSwgaXJvX2dic18yMDIwWzNdLCANCiAgaXJvX2diczAwMTlbM10sIGlyb19nYnNfMDAxOV8yMDE3WzNdLCBpcm9fZ2JzXzAwMTlfMjAxOFszXSwNCiAgaXJvX2dic18wMDE5XzIwMTlbM10sIGlyb19nYnNfMDAxOV8yMDIwWzNdLCANCiAgaXJvX2diczIwMzlbM10sIGlyb19nYnNfMjAzOV8yMDE3WzNdLCBpcm9fZ2JzXzIwMzlfMjAxOFszXSwNCiAgaXJvX2dic18yMDM5XzIwMTlbM10sIGlyb19nYnNfMjAzOV8yMDIwWzNdLA0KICBpcm9fZ2JzNDA1OVszXSwgaXJvX2dic180MDU5XzIwMTdbM10sIGlyb19nYnNfNDA1OV8yMDE4WzNdLA0KICBpcm9fZ2JzXzQwNTlfMjAxOVszXSwgaXJvX2dic180MDU5XzIwMjBbM10sDQogIGlyb19nYnM2MDc5WzNdLCBpcm9fZ2JzXzYwNzlfMjAxN1szXSwgaXJvX2dic182MDc5XzIwMThbM10sDQogIGlyb19nYnNfNjA3OV8yMDE5WzNdLCBpcm9fZ2JzXzYwNzlfMjAyMFszXQ0KICApKQ0KYGBgDQoNCmBgYHtyfQ0KQmlnX3RhYmxlIDwtIGRhdGEudGFibGUoRGlhZ25vc2lzID0gYWxsX2RpYWcsIA0KICAgICAgICAgICAgICAgICAgICAgICAgQWdlX0JhbmRzID0gYWxsX2FnZXMsDQogICAgICAgICAgICAgICAgICAgICAgICBZZWFyID0gYWxsX3llYXJzLA0KICAgICAgICAgICAgICAgICAgICAgICAgQ291bnQgPSBjb3VudF9ldmVudHMsDQogICAgICAgICAgICAgICAgICAgICAgICBQZXJzb25fWWVhcnMgPSByb3VuZChwZXJzX3llYXJfYWxsLCAyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgIElSXzEwMDBfUFkgPSBJUl8xMDAwUFksIA0KICAgICAgICAgICAgICAgICAgICAgICAgSVJfMTAwMF9QWV85NUwgPSBJUl8xMDAwUFlfOTVMLA0KICAgICAgICAgICAgICAgICAgICAgICAgSVJfMTAwMFBZXzk1SCA9IElSXzEwMDBQWV85NUgpDQpgYGANCg0KVGhlIGZvcmVzdCBwbG90IGZpZ3VyZXMgKHNlZSBGaWd1cmUgXEByZWYoZmlnOnQpKSwgc2hvdyB0aGUgaW5jaWRlbmNlIHJhdGVzLiBBIHRvdGFsIG9mIGByIFRORV9hbmFwaE4gKyBUTkVfYW5hcGhQICsgVE5FX2dic2AgZXZlbnRzIG9jY3VycmVkLiBPZiB0aGVzZSBldmVudHMgYHIgVE5FX2FuYXBoTmAgd2VyZSBhbmFwaHlsYXhpcyBuYXJyb3csIGByIFRORV9hbmFwaFBgIHdlcmUgYW5hcGh5bGF4aXMgcG9zc2libGUgYW5kIGByIFRORV9nYnNgIHdlcmUgR0JTLiBXaGVuIHN0cmF0aWZpZWQgaW4gdG8gYWdlIGJhbmRzLCB0aGUgcGVyc29uIHllYXJzIGJlY29tZSBsb3dlciBhbmQgdGhlcmUgaXMgbG93IGNvbmZpZGVuY2UuIEVzcGVjaWFsbHkgaW4gdGhlIGhpZ2ggYW5kIGxvdyBhZ2UgYmFuZHMuIE1vc3QgZXZlbnRzIG9jY3VycmVkIGluIHRoZSBmaXJzdCB0aHJlZSB5ZWFycy4gSW4gdGhlc2UgeWVhcnMgZWFjaCB0eXBlIG9mIGV2ZW50IHN0YXR1cyBoYWQgYXJvdW5kIDE1IHRvIDIwIG9jY3VycmVkIGV2ZW50cy4gVGhlIGxhc3QgeWVhciBvZiB0aGUgc3R1ZHkgaGFzIGFsbW9zdCBubyBldmVudHMgYW5kIGJhZCBpbmNpZGVuY2UgcmF0ZSBjb25maWRlbmNlIGludGVydmFsLg0KDQoNCiMjIyBGb3Jlc3QgUGxvdCBGaWd1cmVzIHstLnRhYnNldH0gDQoNCiMjIyMgVG90YWwgIHstI3RvdH0NCg0KDQpgYGB7ciB0LCBmaWcuY2FwPSdGb3Jlc3QgcGxvdHMgb2YgdG90YWwgSVInfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQoNCmRmIDwtIEJpZ190YWJsZSANCg0KDQoNCmRmX3RvdGFsIDwtIGRmICU+JSAgDQogIGZpbHRlcihZZWFyPT0nVG90YWwnKQ0KDQpkZl90b3RhbCR5X29yZGVyIDwtIGZhY3RvcihwYXN0ZShkZl90b3RhbCRBZ2VfQmFuZHMpLCBsZXZlbHMgPSB1bmlxdWUocGFzdGUoIGRmX3RvdGFsJEFnZV9CYW5kcykpLCBvcmRlcmVkID0gVFJVRSkNCiMgcGxvdCB0aGUgZm9yZXN0IHBsb3QNCmdncGxvdChkZl90b3RhbCwgYWVzKHggPSBJUl8xMDAwX1BZLCB5ID0geV9vcmRlciwgc2l6ZT1QZXJzb25fWWVhcnMpKSArDQogIGdlb21fcG9pbnQoc2hhcGU9MTUpICsNCiAgZ2VvbV9lcnJvcmJhcmgoYWVzKHhtaW4gPSBJUl8xMDAwX1BZXzk1TCwgeG1heCA9IElSXzEwMDBQWV85NUgpLCBzaXplID0gMC41KSArDQogIGZhY2V0X2dyaWQoRGlhZ25vc2lzIH4gLiwgc2NhbGVzID0gImZyZWVfeSIsIHNwYWNlID0gImZyZWVfeSIpICsNCiAgdGhlbWVfYncoKSArDQogIGxhYnModGl0bGUgPSAiRm9yZXN0IFBsb3Qgb2YgSW5jaWRlbmNlIFJhdGVzIiwNCiAgICAgICB4ID0gIkluY2lkZW5jZSBSYXRlIHBlciAxMDAwIFBlcnNvbi1ZZWFycyIsDQogICAgICAgeSA9ICJEaWFnbm9zaXMgYW5kIEFnZSBCYW5kIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJEYXRhIGZyb20gMjAxNyB0byAyMDIwIikrDQogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDE1MCksIGJyZWFrcyA9IHNlcSgwLCAxNjAsIGJ5ID0gMjApKSArDQogIHNjYWxlX3NpemVfY29udGludW91cyhsaW1pdHM9YygwLDI1MDApLCBicmVha3MgPSBzZXEoMCwyNTAwLCBieT01MDApKQ0KYGBgDQoNCiMjIyMgMjAxNyB7LSMyMDE3fQ0KDQoNCmBgYHtyIGssIGZpZy5jYXA9ICdmb3Jlc3QgcGxvdHMgZGF0YSBmcm9tIDIwMTcnfQ0KDQpkZl8yMDE3X1AgPC0gZGYgJT4lICANCiAgZmlsdGVyKFllYXI9PScyMDE3JykNCg0KZGZfMjAxN19QJHlfb3JkZXIgPC0gZmFjdG9yKHBhc3RlKGRmXzIwMTdfUCRBZ2VfQmFuZHMpLCBsZXZlbHMgPSB1bmlxdWUocGFzdGUoZGZfMjAxN19QJEFnZV9CYW5kcykpLCBvcmRlcmVkID0gVFJVRSkNCiMgcGxvdCB0aGUgZm9yZXN0IHBsb3QNCmdncGxvdChkZl8yMDE3X1AsIGFlcyh4ID0gSVJfMTAwMF9QWSwgeSA9IHlfb3JkZXIsIHNpemU9UGVyc29uX1llYXJzKSkgKw0KICBnZW9tX3BvaW50KHNoYXBlPTE1KSArDQogIGdlb21fZXJyb3JiYXJoKGFlcyh4bWluID0gSVJfMTAwMF9QWV85NUwsIHhtYXggPSBJUl8xMDAwUFlfOTVIKSwgc2l6ZSA9IDAuNSkgKw0KICBmYWNldF9ncmlkKERpYWdub3NpcyB+IC4sIHNjYWxlcyA9ICJmcmVlX3kiLCBzcGFjZSA9ICJmcmVlX3kiKSArDQogIHRoZW1lX2J3KCkgKw0KICBsYWJzKHRpdGxlID0gIkZvcmVzdCBQbG90IG9mIEluY2lkZW5jZSBSYXRlcyIsDQogICAgICAgeCA9ICJJbmNpZGVuY2UgUmF0ZSBwZXIgMTAwMCBQZXJzb24tWWVhcnMiLA0KICAgICAgIHkgPSAiRGlhZ25vc2lzIGFuZCBBZ2UgQmFuZCIsDQogICAgICAgc3VidGl0bGUgPSAiRGF0YSBmcm9tIDIwMTciKSArDQogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDE1MCksIGJyZWFrcyA9IHNlcSgwLCAxNjAsIGJ5ID0gMjApKSArDQogIHNjYWxlX3NpemVfY29udGludW91cyhsaW1pdHM9YygwLDI1MDApLCBicmVha3MgPSBzZXEoMCwyNTAwLCBieT01MDApKQ0KYGBgDQoNCg0KIyMjIyAyMDE4IHstIzIwMTh9DQoNCmBgYHtyIGksIGZpZy5jYXA9ICdGb3Jlc3QgUGxvdCBkYXRhIGZyb20gMjAxOCd9DQoNCmRmXzIwMThfUCA8LSBkZiAlPiUgIA0KICBmaWx0ZXIoWWVhcj09JzIwMTgnKQ0KDQpkZl8yMDE4X1AkeV9vcmRlciA8LSBmYWN0b3IocGFzdGUoZGZfMjAxOF9QJEFnZV9CYW5kcyksIGxldmVscyA9IHVuaXF1ZShwYXN0ZShkZl8yMDE4X1AkQWdlX0JhbmRzKSksIG9yZGVyZWQgPSBUUlVFKQ0KIyBwbG90IHRoZSBmb3Jlc3QgcGxvdA0KZ2dwbG90KGRmXzIwMThfUCwgYWVzKHggPSBJUl8xMDAwX1BZLCB5ID0geV9vcmRlciwgc2l6ZSA9IFBlcnNvbl9ZZWFycykpICsNCiAgZ2VvbV9wb2ludChzaGFwZT0xNSkgKw0KICBnZW9tX2Vycm9yYmFyaChhZXMoeG1pbiA9IElSXzEwMDBfUFlfOTVMLCB4bWF4ID0gSVJfMTAwMFBZXzk1SCksIHNpemUgPSAwLjUpICsNCiAgZmFjZXRfZ3JpZChEaWFnbm9zaXMgfiAuLCBzY2FsZXMgPSAiZnJlZV95Iiwgc3BhY2UgPSAiZnJlZV95IikgKw0KICB0aGVtZV9idygpICsNCiAgbGFicyh0aXRsZSA9ICJGb3Jlc3QgUGxvdCBvZiBJbmNpZGVuY2UgUmF0ZXMiLA0KICAgICAgIHggPSAiSW5jaWRlbmNlIFJhdGUgcGVyIDEwMDAgUGVyc29uLVllYXJzIiwNCiAgICAgICB5ID0gIkRpYWdub3NpcyBhbmQgQWdlIEJhbmQiLA0KICAgICAgIHN1YnRpdGxlID0gIkRhdGEgZnJvbSAyMDE4IikgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxNTApLCBicmVha3MgPSBzZXEoMCwgMTYwLCBieSA9IDIwKSkgKw0KICBzY2FsZV9zaXplX2NvbnRpbnVvdXMobGltaXRzPWMoMCwyNTAwKSwgYnJlYWtzID0gc2VxKDAsMjUwMCwgYnk9NTAwKSkNCmBgYA0KDQogDQojIyMjIDIwMTkgey0jMjAxOX0NCg0KYGBge3IgbywgZmlnLmNhcD0gJ0ZvcmVzdCBQbG90IGRhdGEgZnJvbSAyMDE5J30NCg0KZGZfMjAxOV9QIDwtIGRmICU+JSAgDQogIGZpbHRlcihZZWFyPT0nMjAxOScpDQoNCmRmXzIwMTlfUCR5X29yZGVyIDwtIGZhY3RvcihwYXN0ZShkZl8yMDE5X1AkQWdlX0JhbmRzKSwgbGV2ZWxzID0gdW5pcXVlKHBhc3RlKGRmXzIwMTlfUCRBZ2VfQmFuZHMpKSwgb3JkZXJlZCA9IFRSVUUpDQojIHBsb3QgdGhlIGZvcmVzdCBwbG90DQpnZ3Bsb3QoZGZfMjAxOV9QLCBhZXMoeCA9IElSXzEwMDBfUFksIHkgPSB5X29yZGVyLCBzaXplPVBlcnNvbl9ZZWFycykpICsNCiAgZ2VvbV9wb2ludChzaGFwZT0xNSkgKw0KICBnZW9tX2Vycm9yYmFyaChhZXMoeG1pbiA9IElSXzEwMDBfUFlfOTVMLCB4bWF4ID0gSVJfMTAwMFBZXzk1SCksIHNpemUgPSAwLjUpICsNCiAgZmFjZXRfZ3JpZChEaWFnbm9zaXMgfiAuLCBzY2FsZXMgPSAiZnJlZV95Iiwgc3BhY2UgPSAiZnJlZV95IikgKw0KICB0aGVtZV9idygpICsNCiAgbGFicyh0aXRsZSA9ICJGb3Jlc3QgUGxvdCBvZiBJbmNpZGVuY2UgUmF0ZXMiLA0KICAgICAgIHggPSAiSW5jaWRlbmNlIFJhdGUgcGVyIDEwMDAgUGVyc29uLVllYXJzIiwNCiAgICAgICB5ID0gIkRpYWdub3NpcyBhbmQgQWdlIEJhbmQiLA0KICAgICAgIHN1YnRpdGxlID0gIkRhdGEgZnJvbSAyMDE5IikrDQogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDE1MCksIGJyZWFrcyA9IHNlcSgwLCAxNjAsIGJ5ID0gMjApKSArDQogIHNjYWxlX3NpemVfY29udGludW91cyhsaW1pdHM9YygwLDI1MDApLCBicmVha3MgPSBzZXEoMCwyNTAwLCBieT01MDApKQ0KYGBgDQoNCiMjIyMgMjAyMCB7LSMyMDIwfQ0KDQpgYGB7ciA5OTksIGZpZy5jYXA9ICdGb3Jlc3QgcGxvdCBkYXRhIGZyb20gMjAyMCd9DQoNCmRmXzIwMjBfUCA8LSBkZiAlPiUgIA0KICBmaWx0ZXIoWWVhcj09JzIwMjAnKQ0KDQpkZl8yMDIwX1AkeV9vcmRlciA8LSBmYWN0b3IocGFzdGUoZGZfMjAyMF9QJEFnZV9CYW5kcyksIGxldmVscyA9IHVuaXF1ZShwYXN0ZShkZl8yMDIwX1AkQWdlX0JhbmRzKSksIG9yZGVyZWQgPSBUUlVFKQ0KIyBwbG90IHRoZSBmb3Jlc3QgcGxvdA0KZ2dwbG90KGRmXzIwMjBfUCwgYWVzKHggPSBJUl8xMDAwX1BZLCB5ID0geV9vcmRlciwgc2l6ZT1QZXJzb25fWWVhcnMpKSArDQogIGdlb21fcG9pbnQoc2hhcGU9MTUpICsNCiAgZ2VvbV9lcnJvcmJhcmgoYWVzKHhtaW4gPSBJUl8xMDAwX1BZXzk1TCwgeG1heCA9IElSXzEwMDBQWV85NUgpLCBzaXplID0gMC41KSArDQogIGZhY2V0X2dyaWQoRGlhZ25vc2lzIH4gLiwgc2NhbGVzID0gImZyZWVfeSIsIHNwYWNlID0gImZyZWVfeSIpICsNCiAgdGhlbWVfYncoKSArDQogIGxhYnModGl0bGUgPSAiRm9yZXN0IFBsb3Qgb2YgSW5jaWRlbmNlIFJhdGVzIiwNCiAgICAgICB4ID0gIkluY2lkZW5jZSBSYXRlIHBlciAxMDAwIFBlcnNvbi1ZZWFycyIsDQogICAgICAgeSA9ICJEaWFnbm9zaXMgYW5kIEFnZSBCYW5kIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJEYXRhIGZyb20gMjAyMCIpKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxNTApLCBicmVha3MgPSBzZXEoMCwgMTYwLCBieSA9IDIwKSkgKyANCiAgc2NhbGVfc2l6ZV9jb250aW51b3VzKGxpbWl0cz1jKDAsMjUwMCksIGJyZWFrcyA9IHNlcSgwLDI1MDAsIGJ5PTUwMCkpDQpgYGANCg0KDQoNCiMjIExlc3NvbnMgbGVhcm5lZCB7LSNsZXNzfQ0KDQpXZSBoYXZlIGxlYXJuZWQgdG8gdGFrZSBkYXRhIGZyb20gdmFyaW91cyB0YWJsZXMsIGFuZCBzdHJ1Y3R1cmUgaXQgdG8gYSBkYXRhc2V0IHdoaWNoIGNhbiBiZSBhbmFseXNlZC4gSW4gYWRkaXRpb24sIHdlIGhhdmUgbGVhcm5lZCB0aGF0IGEgbG90IG9mIGRhdGEgaXMgbmVlZGVkIHRvIG1ha2UgaW5mZXJlbmNlIGFib3V0IGluY2lkZW5jZSByYXRlcy4gVGhhdCBpcywgd2hlbiBkYXRhIG5lZWRzIHRvIGJlIHN0cmF0aWZpZWQuIFdlIGRpc2NvdmVyZWQgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBkYXRhIGJlY29tZXMgc2tld2VkIHdoZW4gc3RyYXRpZmllZCBpbiBkaWZmZXJlbnQgYWdlIGJhbmRzLiBJbiB0aGlzIGNhc2UgdGhlIGluY2lkZW5jZSBvdmVyIGEgMTAwMCBwZXJzb24geWVhcnMgY29uZmlkZW5jZSBpbnRlcnZhbCB3aWxsIGdldCB3aWRlciBhbmQgdGh1cyBtYWtlIGl0IGhhcmRlciB0byBpbmRpY2F0ZSB0aGUgdHJ1ZSBpbmNpZGVuY2UgcmF0ZS4gTW9yZSBkYXRhIGZyb20gZGlmZmVyZW50IHNvdXJjZXMgY291bGQgaGVscCBpbiBjcmVhdGluZyBhIGJldHRlciBkaXN0cmlidXRlZCBzdHJhdGlmaWNhdGlvbi4gVGhpcyBjYW4gYmUgYWNjb21wbGlzaGVkIGJ5IHVzaW5nIGRhdGEgZnJvbSBhIENvbW1vbiBEYXRhIE1vZGVsLiBUaGUgZGF0YSBjb3VsZCBhbHNvIGhhdmUgc29tZSBiaWFzLiBBbGwgb2YgdGhlIGRhdGEgaXMgY29sbGVjdGVkIHVzaW5nIGhlYWx0aCByZWdpc3RyaWVzIGFuZCAocm91dGluZSkgY2FyZSBkYXRhLiBUaGlzIG1lYW5zIHRoYXQgZXZlcnkgcGVyc29uIGluIHRoZSBkYXRhc2V0LCBoYXMgaGFkIGNvbnRhY3Qgd2l0aCBhbiBoZWFsdGggaW5zdGl0dXRpb24uIFRodXMsIHBlcmZlY3RseSBoZWFsdGh5IHBlb3BsZSB3aXRoIG5vIGV2ZW50cyB3aWxsIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgZGF0YXNldC4gDQoNCiMgQW5uZXhlcyAgey0udGFic2V0fQ0KDQojIyBBbm5leCAxIFJlc3VsdHMgVGFibGUgey0jVGFibGVzfQ0KDQpgYGB7ciB0YWIyLCByZXN1bHRzID0gJ2hvbGQnfQ0KZGF0YXRhYmxlKEJpZ190YWJsZSwgDQogICAgICAgICAgY2FwdGlvbj0nSW5jaWRlbmNlIFJhdGVzIHdpdGggOTUlIENJJywNCiAgICAgICAgICBjbGFzcz0nY2VsbC1ib3JkZXIgc3RyaXBlJywgDQogICAgICAgICAgcm93bmFtZXM9RiwgDQogICAgICAgICAgY29sbmFtZXM9YygnRGlhZ25vc2lzJywgJ0FnZSBCYW5kcycsICdZZWFyJywgJ0Ftb3VudCBvZiBFdmVudHMnLCANCiAgICAgICAgICAgICAgICAgICAgICdQZXJzb24gWWVhcnMnLCAnSVIgMTAwMCBQZXJzb24gWWVhcnMnLCAnSVIgMTAwMCBQZXJzb24gWWVhcnMgIDk1JSBDSSBMb3dlcicsICdJUiAxMDAwIFBlcnNvbiBZZWFycyA5NSUgQ0kgSGlnaGVyJyksDQogICAgICAgICAgZXh0ZW5zaW9ucz0nQnV0dG9ucycsDQogICAgICAgICAgb3B0aW9ucyA9IGxpc3QoZG9tID0gJ0JmcnRpcCcsIGJ1dHRvbnMgPSBjKCdjb3B5JywgJ2NzdicsICdleGNlbCcsICdwZGYnLCAncHJpbnQnKQ0KICAgICAgICAgICkpDQpgYGANCg0KDQoNCg0KIyMgQW5uZXggMiBEYXkgNiB7LSNkYXk2fQ0KDQpgYGB7ciBmaWcuYWxpZ249J2NlbnRlcicsIG91dC53aWR0aD0nMTAwJScsb3V0LmhlaWdodD0gNTAwMCxyZXN1bHRzPSdhc2lzJ30NCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJkYXk2LnBkZiIpDQpgYGANCg0KDQoNCg==